ぽちぽちと git を使っていたら、変更したはずのないファイルが変更扱いになっていて悩みました。
Visual Studio で変更してないのに Ctrl+S を押すと git では変更扱いになるの何でだ
— しばやん (@shibayan) May 29, 2013
他のリポジトリでは発生していなくて、ある一つのリポジトリだけでこの現象が起きていたので Twitter で呟いたところ、UTF-8 の BOM が原因だと教えてもらいました。
@ishisaka @shibayan 手元のVST4GやTortoiseGitは反応し無いようなので、BOMや改行コードの問題な気が...
— Kaoru Nakajima (@kaorun) May 29, 2013
Visual Studio はデフォルトで UTF-8 のファイルに BOM を付けるようになっているので、プラグインを入れて BOM を付けないようにすれば解決するらしいです。
Visual Studioの規定値でUTF-8にBOMを付けないようにする - Neutral Scent
しかし、他のリポジトリでは発生していないので調べてみたところ、対象のリポジトリにある .gitattributes の設定が原因だと分かりました。
# Auto detect text files and perform LF normalization * text=auto
Dealing with line endings · GitHub Help
この設定は GitHub で C# を選んだ時にデフォルトで作られた気がします。ごめんなさい、gitattributes/CSharp.gitattributes at master · Danimoth/gitattributes · GitHub から自分でコピーして作成していたみたいです。そして text=auto という設定は、本来ならば良い感じに改行コードとかを扱ってくれるはずなんですが、今回は BOM が原因で誤爆していたようです。
調べたところ、特に指定しなくても問題なさそうだったので削除しました。
UTF-8 BOM を見ないように変更 · 2c46624 · shibayan/SwissKnife · GitHub
これで Visual Studio で保存しても変更扱いとならなくなったので、幸せに生きていけそうです。