キャッシュを削除してもgitignoreが反映されない時は?


何をしても.gitignoreが反映されない!

という状態で詰まったので、解決までの経緯を備忘録兼ねて記事にします。

忙しい人向けの結論

  • .gitignore文字コードを見直す。
  • UTF-8Shift-JISにしよう。

詳細(下にジャンプします)


症状とか経緯とか↓

キャッシュを消してもダメだった

一度pushしたファイルだったり、インデックスが残ってると反映されないらしいので、キャッシュを全消し。

git rm -r --cached .

改めて、

git add .

で、いつもは正常に反映される・・・はずだった━━━━

しかし今回ばかりは何をしても反映されない!

放り投げて寝ました

何時間も向き合って、あらゆるパターンを試してもダメ。
寝て起きて試してもダメ。

見てください。寝癖もダメって言ってます。

結論:文字コードを見直す

その.gitignoreくん、文字コードおかしくないですか?
UTF-8Shift-JISで書きましょう。

...

ムリダナ(・×・)と諦めかけていたら、

ん...?文字コードがUTF-16 LEで、改行コードがLFだと...?
意図せぬ文字コードになっています。

文字コードをUTF-8にしてあげたら、あっさり反映されるようになりました(改行コードもCRLFに変更しました)。
Shift-JISでも正常に反映されます。

原因とか

【原因】Windows PowerShell+giboの相性問題

今回は、Windows PowerShell上でgiboを用いて生成していました。
この組み合わせが問題みたい。

今回の.gitignoreの生成風景
gibo dump Python VisualStudioCode >> .gitignore

どうやら、Windows PowerShellgiboの組み合わせだと、デフォルトで出力がUTF-16 LEかつLFになるみたいです。

GitはUTF-16 LEで書かれた.gitignoreを読むことができません。

【対策】Windows PowerShell+giboは使わない

giboを利用するならWindows PowerShellは避けた方良さそうです。

代わりに、以下の組み合わせが良さそうです。

  • コマンドプロンプト + gibo
  • Git Bash + gibo
  • Macのターミナル + gibo

【言い訳】Windows PowerShell+giboは普段使っていない

普段、Macのターミナルgiboを用いて.gitignoreを生成していました。

前項のとおり、Macのターミナル+giboの組み合わせの場合、UTF-8かつCRLFで出力されるため、正常に反映されていました。

解決に何時間も要した最大の原因はコレです。
まさか文字コードが落とし穴だなんて、1μmも考えていませんでした。

まとめ

何してもダメな時、文字コードを見直してみてください。

コレに限らず、文字コードが原因でハマること、年に数回ありますよね。
今後も気を付けたいところです。

遅延増加したけれど沢山眠れたので、