TL;DR — 手っ取り早い解決策
以下のコマンドを一度実行すれば、警告が消えてWindowsでの改行コードを正しく処理できます:
git config --global core.autocrlf true
クロスプラットフォームのチームで作業している場合や、特定のファイルで警告が繰り返し表示される場合は、.gitattributes ファイルを使用してください — 詳細は以下で説明します。
この警告が表示される理由
Windowsの改行コードは CRLF(\r\n)です。LinuxとmacOSは LF(\n)を使用します。Windows上でLFのみの改行コードを含むファイルをクローンまたはステージングすると、Gitはワーキングディレクトリ用にCRLFへ変換する旨を警告します。
この警告は無害で、データが失われることはありません。しかし、ノイズになります。さらに悪いことに、autocrlf の設定が間違っていると、一行も変更していないのに git status のたびにファイルが「変更済み」として表示されてしまいます。
根本的な設定は core.autocrlf です:
true— チェックアウト時にLF→CRLF、コミット時にCRLF→LFに変換します(Windowsの標準設定)input— コミット時にCRLF→LFに変換するのみで、チェックアウト時は変換しません(WSLまたはLinux向けに開発するWindows開発者に適しています)false— 変換を一切行いません(改行コードを自分で管理します)
解決策1:core.autocrlf をグローバルに設定する(最も簡単)
Windowsネイティブのプロジェクトで作業するほとんどのWindows開発者には、この設定が適しています:
git config --global core.autocrlf true
Linuxサーバーをターゲットにしている場合、またはWSL内で作業している場合は、代わりに input を使用してください:
git config --global core.autocrlf input
現在の設定を確認するには:
git config --global core.autocrlf
解決策2:.gitattributes を使用する(チームに推奨)
グローバル設定はあなたのマシンでの問題を解決します。しかし、チームメンバー全員が正しい設定を持っている必要があります — そこで問題が生じます。.gitattributes ファイルを使用すると、各自のグローバル設定に関係なく、リポジトリレベルで改行コードを強制できます。
リポジトリのルートに .gitattributes を作成してください:
# テキストファイルを自動検出してリポジトリ内でLFに正規化する
* text=auto
# スクリプトとソースファイルはLFを強制
*.sh text eol=lf
*.py text eol=lf
*.js text eol=lf
*.ts text eol=lf
*.json text eol=lf
*.md text eol=lf
*.yml text eol=lf
*.yaml text eol=lf
# WindowsのみのファイルはCRLFを強制
*.bat text eol=crlf
*.cmd text eol=crlf
*.ps1 text eol=crlf
# バイナリファイル — 変換しない
*.png binary
*.jpg binary
*.gif binary
*.ico binary
*.zip binary
*.exe binary
このファイルをコミットしてプッシュしてください。Gitはチーム全体にこれらの改行コードを適用します — 開発者ごとの設定は不要です。
解決策3:既存のリポジトリを正規化する
リポジトリ内に改行コードが混在している場合は、2つのステップでクリーンアップできます:
# ステップ1:まず .gitattributes を追加する
git add .gitattributes
git commit -m "Add .gitattributes for line ending normalization"
# ステップ2:キャッシュされたファイルをすべて削除して正しい改行コードで再追加する
git rm --cached -r .
git reset --hard
git add .
git commit -m "Normalize line endings across repo"
ステップ2により、Gitはすべてのトラック済みファイルを新しい .gitattributes ルールで再処理します。このコミット以前のリポジトリ履歴の改行コードは変更されませんが、以降のすべてのファイルは一貫した状態になります。
解決策4:動作を変えずに警告を抑制する
すでに .gitattributes で改行コードを管理していて、出力をすっきりさせたいだけの場合は、警告を直接無効化できます:
git config --global core.safecrlf false
または、改行コードが混在するコミットをブロックする true ではなく、デフォルトの warn のままにしておくこともできます:
git config --global core.safecrlf warn
この方法は、他の箇所で改行コードの問題を解決した後に使用してください。これは根本的な解決策ではなく、警告を消すだけのものです。
修正を確認する
グローバル設定を確認するには:
git config --global --list | grep -i crlf
期待される出力(true 設定の場合):
core.autocrlf=true
ファイルの実際の改行コードを確認したい場合は:
# Git Bash
file yourfile.txt
# 出力例: yourfile.txt: ASCII text, with CRLF line terminators
# PowerShell
(Get-Content yourfile.txt -Raw) -match "\r\n"
更新された設定でファイルをステージングした後、git status を実行してください。実際にコンテンツを変更していないのに何も変更済みとして表示されなければ、改行コードは安定しています。
修正後も警告が表示され続ける場合
- リポジトリレベルの設定がグローバル設定を上書きしている — リポジトリ内で
git config --local core.autocrlfを実行してください。.git/config内のローカル設定は、グローバルに設定した値を黙って上書きします。 - .gitattributes の競合 —
eol=lfのルールが設定されているファイルがワーキングディレクトリ内でまだCRLFの場合、警告が繰り返し表示されます。git rm --cached <file>を実行してからgit add <file>で強制的に再正規化してください。 - エディターが保存時にCRLFを書き込んでいる — VS Code:設定に
"files.eol": "\n"を追加してください。Notepad++にも「編集 → 改行コードの変換」に同様のオプションがあります。
ほとんどのチームに推奨される設定
- ベースラインのルールとして
* text=autoを含む.gitattributesを追加する。 - Windows開発者は
git config --global core.autocrlf trueを設定する。 - Mac/Linux開発者は
git config --global core.autocrlf inputを設定する。
最終的な結果:リポジトリは常にLFで保存されます。Windows開発者はワーキングディレクトリでCRLFを取得します。MacおよびLinux開発者はLFを取得します。プラットフォーム間での予期しない問題は発生しません。

