できない.dev

Git で「LF will be replaced by CRLF」の警告が消せない

「LF will be replaced by CRLF」は core.autocrlf による改行コード自動変換の予告である。
.gitattributes で改行方針を固定するか自動変換を切れば止まる。

公開:

要約

「LF will be replaced by CRLF」はエラーではなく警告である。
Git が改行コードを自動変換する予告で、core.autocrlf の設定によって起きる。
変換方針を .gitattributes で固定するか、core.autocrlf を無効にすれば止まる。

よくある原因

  1. 自動変換: Windows では core.autocrlf の既定が true で、コミット時に CRLF から LF、チェックアウト時に LF から CRLF へ変換する。
    この予告が警告として出る。
  2. 改行の混在: リポジトリに CRLF と LF が混ざっていると、次に Git がファイルを触るときに置き換えが起きる。
  3. 方針が未固定: .gitattributes が無いと、開発者ごとの OS やエディタ設定で変換結果がばらつく。

解決策

1. .gitattributes で改行を正規化する(推奨)

リポジトリのルートに .gitattributes を置き、テキストの改行を LF に統一する。

* text=auto

これで作業ツリーの改行が何であっても、リポジトリ(index)には LF で格納される。
特定の拡張子だけ CRLF を保ちたい場合は *.bat text eol=crlf のように eol を明示する。
挙動の詳細は公式の gitattributes ドキュメント(新しいタブで開く)を参照する。

2. 既存ファイルを正規化する

.gitattributes を追加しただけでは既存ファイルは変わらない。
次のコマンドで作業ツリー全体を再正規化する。

git add --renormalize .
git commit -m "Normalize line endings"

3. 警告だけ止めたい場合

変換自体が不要なら自動変換を切る。

git config core.autocrlf false

チームで方針を揃えるなら、個人設定より .gitattributes で固定する方が再現性が高い。

この記事は役立ちましたか?