改行コードについて (Git編)
メモ
- 改行コードを自動的に変換する機能、git みたいなモダンな VCS には無いかと思ったら、いまでもあるらしい(CVS 時代だけかと思ってたよ。しがらみだね)
Windows 版の Git インストーラでの指定
- 変換するかどうかのオプションを何ステップ目かで聞いてくる (
Configuring the line ending conversions
) - それを逃しても、後から設定すれば良い
選択肢
- Checkout Windows-style, commit Unix-style line endings
- チェックアウト時に CRLF に変換、コミット時に LF に変換
core.autocrlf=true
- Checkout as-is, commit Unix-style line endings
- チェックアウト時は変更なし、コミット時に LF に変換
core.autocrlf=input
- Checkout as-is, commit as-is
- 改行コードを一切変更しない
core.autocrlf=false
→ ややこしいので 3 にする
※ ただでさえ、Python, Excel, エディタ の、どこで変わったのか、みたいに調べることになって不毛なので、自動の変換は基本Offにするのが判別には優しいと思う (が、現場ルールあるなら強く主張する話でもない。やっちゃう人はどう設定されてたってやる)
コマンド
現在の設定値確認
bash
git config --get core.autocrlf
設定変更
bash
git config --global core.autocrlf false
設定ファイル .gitattributes
これを設定しておけば、チーム作業のときは設定が統一される
設定例
.gitattirbutes
# すべてのテキストファイルは自動的に LF に正規化(推奨)
* text=auto eol=lf
# 明示的に LF を使わせたい(スクリプト系など)
*.sh text eol=lf
*.py text eol=lf
*.md text eol=lf
*.json text eol=lf
# Windows 専用ファイルだけ CRLF を許す場合
*.bat text eol=crlf
※ .gitattributes を導入したあと、すでに改行コードが混在している場合は大量の差分が出ることがある
初回導入時は以下のコマンドを検討
bash
git add .gitattributes
git commit -m "Add line-ending normalization"
git rm --cached -r .
git reset --hard