【Git】 autocrlf false なのに CRLF に自動変換される現象
【Git】 autocrlf false なのに CRLF に自動変換される現象
Git で autocrlf false なのに CRLF に自動変換される現象が発生。 その解決方法のメモ。
現象
Git の autocrlf=false なのにリポジトリにアップされているファイルと改行コードが違う。
autocrlf を確認
まずは autocrlf の確認をして自動変換がなされないことを確認
git config --global core.autocrlf
input-
checkout: 元のまま
-
commit: LFに変換
true-
checkout: CRLFへ変換
-
commit: LFに変換
false-
checkout: 元のまま
-
commit: 元のまま
もし設定されてなければ以下のコマンドで false に設定すると自動変換されません。
git config --global core.autocrlf false
原因 犯人は.gitattributes
.gitattributes の設定が犯人でした。
# Set the default behavior, in case people don't have core.autocrlf set.
* text=auto
* text=autoにすると変換を行うかどうかはGit任せになります。 この設定少し厄介で、 autocrlfが「false」の状態でこの.gitattributesを追加するとautocrlfの設定を無視してCRLFに変換されるそうです。ええ・・・ 「input」なら問題なしです。 引用元:【Git】変更していないのに勝手に変更されるファイルがある時の対処法 | offlo.in(オフロイン)
対策
対策をいくつか。
外す
指定を辞めます。
# * text eol=lf
指定する
ちゃんと指定すること
* text eol=lf
注意点
ただし、上記2つの方法をやった後はローカルのリポジトリを取得しなおさないと中途半端な状態になるので作り直すようにしてください。