Windows版 Git には commit と checkout のときに、テキストファイルの改行コード(CRLF,LF)を自動変換する機能がある。
自動改行コード変換機能の設定
自動改行コード変換 有効
1 |
$ git config --local core.autocrlf true |
自動改行コード変換 無効
1 |
$ git config --local core.autocrlf false |
自動改行コード変換 コミットのときのみ(CRLF⇒LF一方向)
1 |
$ git config --local core.autocrlf input |
自動改行コード変換セーフ設定
自動改行コード変換機能(autoCRLF)は便利(余計なお世話?)であるが、そのファイルが『テキストファイル』か『バイナリファイル』かの判定をgitのアルゴリズムに頼っている。
CRLF と LF が混在するファイルにおいて、もし一律にCRLF⇒LF変換が実行されると破壊的な変更となる。(願わくは、そのようなファイルは必ず「バイナリ」と判定されて自動改行コード変換の対象外となることがgitの期待される振る舞いであるが…)
safeCRLFを有効にするとCRLFとLFが混在するファイルは必ず自動改行コード変換の対象外となる。
1 |
$ git config --global core.safecrlf true |
属性(.gitattributes)の設定
テキストファイルである(自動改行コード変換対象である)か否かの判定は、ファイルの中身をサーチするgitプログラムに依存する。しかし属性(.gitattributes)を設定することで『ファイル拡張子』によって「テキストファイル」or「バイナリファイル」の判定を行うようにgitの振る舞いを変えることができる。特にShift-JISのように「テキスト」と「バイナリ」の判定が難しい文字エンコーディングをつかっているケースでは、ファイル拡張子で一律に「テキストファイル」か「バイナリファイル」かを判定する方法が確実である。
.gitattributes の記述例
1 2 3 |
* text=auto *.c text eol=crlf *.h text eol=crlf |