しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

Visual Studio の UTF-8 BOM と Git の設定で悩まされた話

ぽちぽちと git を使っていたら、変更したはずのないファイルが変更扱いになっていて悩みました。

他のリポジトリでは発生していなくて、ある一つのリポジトリだけでこの現象が起きていたので Twitter で呟いたところ、UTF-8 の BOM が原因だと教えてもらいました。

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 で保存しても変更扱いとならなくなったので、幸せに生きていけそうです。