できない.dev

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

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

公開: 更新:

実行例あり(2026-09-09 に実環境で検証)

要約

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

実行例

alpine/git で core.autocrlf を有効にしたまま LF のファイルを add すると、置き換えを予告する警告がそのまま出る。
ただし od -c でコミット済みの中身を見ると改行は LF のままで、自動変換を切って add し直すと警告は出なくなる。

true
$ git add lf.txt
warning: in the working copy of 'lf.txt', LF will be replaced by CRLF the next time Git touches it
終了コード: 0
warning: in the working copy of '.gitattributes', LF will be replaced by CRLF the next time Git touches it
$ git add --renormalize .
renormalize の終了コード: 0
$ git status --porcelain
$ git commit -m "normalize line endings"
nothing to commit, working tree clean
$ git show HEAD:lf.txt | od -c
0000000   l   i   n   e   1  \n   l   i   n   e   2  \n
0000014
$ git config core.autocrlf false
$ git add lf.txt
終了コード: 0(警告が出なければ解消)

— 2026-09-09 時点の出力

検証環境

検証日
実行環境
alpine/gitAlpine Linux v3.24
バージョン
  • Git 2.54.0

この記事の「実行例」は、上記の環境で実際にコマンドを実行して得られた出力をそのまま掲載しています。 再現手順はリポジトリの検証スクリプトとして管理し、定期的に再実行して出力を更新しています。

よくある原因

  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 で固定する方が再現性が高い。

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