Skip to main content

改行コードについて (Git編)

メモ

  • 改行コードを自動的に変換する機能、git みたいなモダンな VCS には無いかと思ったら、いまでもあるらしい(CVS 時代だけかと思ってたよ。しがらみだね)

Windows 版の Git インストーラでの指定

  • 変換するかどうかのオプションを何ステップ目かで聞いてくる (Configuring the line ending conversions)
  • それを逃しても、後から設定すれば良い

選択肢

  1. Checkout Windows-style, commit Unix-style line endings
    • チェックアウト時に CRLF に変換、コミット時に LF に変換
    • core.autocrlf=true
  2. Checkout as-is, commit Unix-style line endings
    • チェックアウト時は変更なし、コミット時に LF に変換
    • core.autocrlf=input
  3. 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