Git for Windowsで、BOM付きUTF-16のテキストファイルを使用すると、gitにファイルがBinaryとして扱われてしまい、デフォルトの状態で以下の問題がある。
- git diff でdiffを見たときに、Binary files differ と表示され、差分の内容を見ることができない。
- git merge, git rebase を実行すると、修正した場所が別の所でも、CONFLICTが発生し、Automatic merge failedになる。
そこで、普段使いそうな文字コードでファイルを作成し、それぞれがどのように扱われるかを見てみた。
文字コード | 扱い | diff | merge/rebase |
---|---|---|---|
CP932 | text | 文字化けする | 成功する |
UTF-8(BOM無し) | text | 文字化けしない | 成功する |
UTF-8(BOM付き) | text | 文字化けしない | 成功する |
UTF-16LE(BOM無し) | binary | - | 失敗する |
UTF-16LE(BOM付き) | binary | - | 失敗する |
.gitattributes等はない状態での話です。