#git
#autocrlf
#LF
#CRLF

Gitで管理しているソースの改行コードに注意

改行コード

改行コード名改行コードOS
LF(Line Feed)\nUNIX系全般
CR(Carriage Return)\rMac OS(9以前)
CRLF\r\nWindows系全般

改行コード不一致のトラブル

チームで開発する時、改行コードを統一しないと、不注意にトラブルが発生する恐れがあります。

  1. スクリプト実施不可

    • Linuxのシェルの改行コードがLFではないと、実行できません。
    • 逆にWindowsのコマンドスクリプトの改行コードがCRLFではないと、実行出ません。
  2. 差分比較不可

    ソースを修正してないのに、改行が違う場合、行の差分は出ています。 実際の変更内容は見づらくなります。

ローカル開発時の改行コードのプラクティス

Gitクライアントのデフォルト動きの制御

グローバルのコンフィグ(core.autocrlf)をコンフィグする

設定チェックアウト時コミット時
trueLF -> CRLFCRLF -> LF
input変換しないCRLF -> LF
false変換しない変換しない

コンフィグ修正のコマンドです。

# Windows で作業をする場合
git config --global core.autocrlf true
# Linux や Mac などの行末に LF を使うシステムで作業をしている場合
git config --global core.autocrlf input
# 単一種類の端末の場合
git config --global core.autocrlf false

リポジトリに.gitattributesで制御

リポジトリのルートフォルダーに.gitattributesを追加して、ソースの改行コードを制御します。

Java開発のサンプル例:

.gitattributes

# デフォルトの改行コードをLFにする。
* text=auto eol=lf

# Linuxシェル
*.sh    text eol=lf

# Windowsシェル
*.bat   text eol=crlf
*.cmd   text eol=crlf
*.ps1   text eol=crlf

# 完全にバイナリで変更すべきでないファイルをすべて示す。
*.png   binary
*.jpg   binary
*.jar   binary

# ビルドツールのLinux用シェル
mvnm    text eol=lf
gradlew text eol=lf

参照

  1. 気をつけて!Git for Windowsにおける改行コード
  2. 行終端を処理するようGitを設定する
  3. Git のカスタマイズ - Git の属性

git
autocrlf
LF
CRLF
記事一覧へ戻る