トラブルシューティング

改行コード(CRLF/LF)の問題と対策

Windows/Mac/Linux 間の改行コードの違いによる問題と設定方法

改行コード(CRLF/LF)の問題と対策 diagram

改行コードの違いとは

Windows は改行に CRLF(\r\n)、macOS / Linux は LF(\n)を使います。

チームに異なる OS のメンバーがいると、ファイルを編集しただけで大量の差分が発生したり、スクリプトが動かなくなったりする問題が起こります。

core.autocrlf の設定

  • input(推奨)

    コミット時に CRLF を LF に変換し、チェックアウト時は変換しません。OS を問わず全員がこの設定で揃えるのが現代的なベストプラクティスです。

  • true

    Windows で以前推奨されていた設定です。チェックアウト時に CRLF に戻すため、最近の LF を扱えるエディタでは不要なケースが多いです。

  • false

    自動変換を一切行いません。.gitattributes で完全に制御する場合に選択します。

bash
# 全 OS 共通の推奨設定
git config --global core.autocrlf input

.gitattributes で統一する(推奨)

チーム開発では .gitattributes による制御がベストプラクティスです。

core.autocrlf は各メンバーの個人設定に依存するため、設定忘れや誤設定があると改行コードの不統一が発生します。

.gitattributes はリポジトリにコミットされるため、clone した時点で全メンバーに同じルールが自動適用され、個人の環境設定に左右されません。

新規プロジェクトでは最初に .gitattributes を作成することを強く推奨します。

bash
# .gitattributes の例
* text=auto
*.sh text eol=lf
*.bat text eol=crlf
*.png binary
*.jpg binary

既存ファイルの改行コードを修正する

  1. .gitattributes をコミット

    先にリポジトリにルールを登録しておきます。

  2. git add --renormalize . を実行

    .gitattributes のルールに従って、既存ファイルの改行コードが再正規化されます。

  3. 変更をコミット

    git commit -m "改行コードを統一" のように意図がわかるメッセージを付けてコミットします。

bash
# 改行コードを再適用
git add --renormalize .
git commit -m "改行コードを統一"

関連コマンド