未変更のファイルが変更扱いになっていた問題(サブモジュール編)
最近、git addしてもgit checkoutしても、変更扱いされているファイル(以下hoge)がありました。
僕としてはhogeをまったく変更した記憶がないんですが・・
同じような現象としてファイルモードの問題があったので、
下記URLを参考に解決しようと思ったのですが、
あんまり関係ありませんでした(ノ゚゚Д゚゚)ノオラァッ!!
その後・・
たまたまgit submodule initやgit submodule updateしたときにhogeに対して下記エラーが発生しました。
No submodule mapping found in .gitmodules for path hoge
なんかサブモジュールになってる・・
工エエェェ(´д`)ェェエエ工
どうやら「インデックスに紐付いていないサブモジュールがあるぞい」というエラーらしいです。
サブモジュールはファイルモードが160000になっているため、
以下コマンドでインデックス一覧を確認できます。
git ls-files --stage | grep 160000
インデックス一覧と".gitmodules"ファイルを比べたときに一覧にしかないインデックスがあったので、git rmすることで無事に解決しました。
--cachedオプションを付けなければファイルごとサヨナラします。注意しましょう。
git rm --cached hoge
サブモジュールェ・・
追記
実はhogeは拾ってきたZshのプラグインで、こいつがコミット時にディレクトリエントリとみなされたことが原因でした。
git cloneしたものをリポジトリに含むときにはちゃんとサブモジュールにしましょう。