CRLF
別名: 改行コード / CR+LF / 復帰改行
復帰 (CR, 0x0D) と改行 (LF, 0x0A) の 2 文字で 1 行の終わりを表す改行コード。
Windows 系の既定で、Unix 系の LF と混ざると差分や実行の不具合になる。
公開:
定義
CRLF は、復帰 (CR, 0x0D) と改行 (LF, 0x0A) の 2 文字を並べて 1 行の終わりを表す改行コードです。
Windows のメモ帳や多くの Windows 製ツールが既定で書き出します。
Unix 系や macOS は LF の 1 文字だけを使うため、同じテキストでも 1 行あたり 1 バイト分の差が出ます。
詳細
Git は改行コードを属性で扱います。.gitattributes に * text=auto と書くとコミット時に LF へ正規化され、チェックアウト時の変換は eol 属性と core.autocrlf 設定で決まります。*.sh text eol=lf のように、ファイル種別ごとに固定することもできます。
チーム内で設定が揃っていないと、中身を変えていないのに全行が差分として出たり、Windows で作ったシェルスクリプトの 1 行目末尾に CR が残って実行できなくなったりします。
改行コードはリポジトリ側の .gitattributes で決めるのが確実です。
よくある誤解
- 「CRLF と LF は表示が同じだから同じもの」:バイト列が違うので Git は別の内容として扱います。
- 「
core.autocrlfを各自で設定すれば十分」:個人設定はクローンごとに変わります。.gitattributesをコミットしてリポジトリ単位で揃えるのが確実です。
関連
警告の消し方は Git で「LF will be replaced by CRLF」の警告が消せない、スクリプトが動かない場合は Bash で「/bin/bash^M: bad interpreter」が解決できない を参照してください。