Akata Works

東京エンジニア。主にRuby,Go,たまにAWSとiOS。ゲーム音楽が好きです。連絡はTwitterかakata.onen@gmail.comまで

未変更のファイルが変更扱いになっていた問題(サブモジュール編)

最近、git addしてもgit checkoutしても、変更扱いされているファイル(以下hoge)がありました。
僕としてはhogeをまったく変更した記憶がないんですが・・

同じような現象としてファイルモードの問題があったので、
下記URLを参考に解決しようと思ったのですが、
あんまり関係ありませんでした(ノ゚゚Д゚゚)ノオラァッ!!


その後・・

たまたまgit submodule initgit 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したものをリポジトリに含むときにはちゃんとサブモジュールにしましょう。

参考URL

Git - サブモジュール