LoginSignup
117
96

More than 1 year has passed since last update.

【Git助っ人】.gitignoreに追加したのに、いつまで経っても出てくるアイツをgitの世から消し去る方法

Last updated at Posted at 2022-10-13

gitってたまに難しい。毎日使っていればpullだのpushは既に親友同然、statusあたりは頼れる兄貴感覚。しかしちょっとイレギュラーなことを行おうとした場合、急にやつはつっかかってきたりする。やめて欲しい。

今回はタイトルにもある通り、一度インデックスにあげてしまったファイルを、.gitignoreに後から追加した場合に、なんか思った通りにいかない時の話。

事象

一度インデックスに挙げたり(要はgit add済)、コミットしたファイル(git commit済み)を、あとから.gitignoreに追加した時に、なかなか追跡対象から外れないことがある。

パスも間違っていないのになぜだーと叫ぶ私。
相も変わらずしれっと追跡対象にファイルを提示し続けるgit
仁義なき戦いとは、きっとこういうことを言うのだろう。知らないけれど1

原因

.gitignoreに追記した削除対象のファイルのキャッシュが、インデックスに残り続けているため。これは.gitignoreがリポジトリーに対し、これから追加されるファイルを追跡対象からはずすように伝えるファイルであるため。

従って、キャッシュがある=新規追加されたファイルとみなされない=追跡対象であるという判断がされてしまって、いつまで経っても追跡対象から外れてくれないことになる。

解決法

.gitignoreに追記後、キャッシュを消す。

git rm --cached <file-name>
git rm -r --cached . // ファイル内の全キャッシュを削除

解決法2?

ちょっとリサーチしたら、こんなコマンドも出てきた。
まだ試してみていないが、こちらの方が追跡対象にする/しないを、柔軟に対応できそうな感じがする。

git update-index --assume-unchanged  <filename> //ファイルを追跡対象にする
git update-index --no-assume-unchanged  <filename> //ファイルを追跡対象に戻す

余談

.gitignoreの他にも、.git/info/exclude下に記述する方法もあるそうで。ここに記述されたルールはコミットされない。よって、完全に自分にしか関係していないファイルはこちらの記述でもよさそう。例えば、他の人と絶対共有しなくていい個人的なメモだとポエムだとかは、こちらに記述して管理もありかもしれない。

# .git/info/exclude 内での書き方(参照ページからそのまま拝借)

# ‘.project’と‘.classpath’は追跡対象外
.project
.classpath

ただ、他の人も設定を共有した方がいい場合(共通で使っているエディタ固有のファイルなど)は、.gitignoreの方がよさそうだ。

  1. 最近部署内に関西の方が増えてきたので、ちょっと寄せてみている。知らんけどって、いい言葉ですね。知らんけど。

117
96
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
117
96