未変更のファイルが変更扱いになっていた問題(サブモジュール編)
最近、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
したものをリポジトリに含むときにはちゃんとサブモジュールにしましょう。