5秒でできる解決策
この警告を何度も目にすることに疲れていませんか?ほとんどのWindows開発者は、Gitに変換を自動で任せるのが最善です。ターミナルで以下のコマンドを実行してください。
git config --global core.autocrlf true
もし改行コードをそのままの状態(通常はWindowsのみの環境で作業する場合のみ)に保ちたい場合は、代わりにこちらを使用します:
git config --global core.autocrlf false
実際には何が起きているのか?
この警告は、テキストの行をどのように終わらせるかという、OS間での数十年にわたる意見の相違に起因しています。「Enter」キーを押すたびに、隠し文字が保存されます。
- WindowsはCRLF(Carriage Return + Line Feed、
\r\n)を使用します。これは改行ごとに2バイトを消費します。 - LinuxおよびmacOSはLF(Line Feed、
\n)を使用します。これは1バイトしか消費しません。
Gitは元々Linux向けに構築されたため、LFを優先します。Macで作成されたファイルをWindowsマシンに追加すると、Gitはその不一致を検知します。Windowsのエディタで問題が起きないよう、ローカルではLFをCRLFに置き換えるという警告を出しているのです。ただし、リポジトリ内の「信頼できる唯一の情報源(Source of Truth)」は、全員の互換性を保つためにLFのまま維持されます。
開発者のための最適な解決策
1. 一度設定すればOK:グローバル設定
Windowsユーザーにとって、core.autocrlfをtrueに設定するのが標準的な対応です。この設定は架け橋のように機能します。コードを取得(checkout)するときにLFをCRLFに変換し、コードをコミット(commit)するときにLFに戻します。これにより、リポジトリはクリーンに保たれ、Windowsのツールも正常に動作します。
# ユーザーアカウントにグローバル設定を適用する
git config --global core.autocrlf true
2. プロの方法:.gitattributesを使用する
個々のグローバル設定をチーム全体に強制するのは困難です。チームメンバーが異なる設定を持っていると、改行コードが混在して混乱を招きます。これを防ぐには、プロジェクトのルートに.gitattributesファイルを作成します。このファイルはローカル設定を上書きし、すべての貢献者に同じルールを強制します。
ファイルを作成し、以下のルールを追加します:
# すべてのファイルをテキストとして扱い、改行コードを自動的に処理する
* text=auto
# シェルスクリプトが常にLFを使用するようにする(WindowsのCRLFはbashスクリプトを壊すため)
*.sh text eol=lf
# バッチファイルが常にCRLFを使用するようにする
*.bat text eol=crlf
このファイルをリポジトリにコミットしてください。これで、開発者がMacを使っていようがPCを使っていようが、Gitはこれらの正確なルールに従います。
3. 警告を非表示にする
Gitにファイルを一切触らせたくない場合もあるでしょう。もしVS CodeやNotepad++などのコードエディタがLFを完全に処理できると確信している場合は、変換とセーフティチェックをオフにできます。
git config --global core.autocrlf false
git config --global core.safecrlf false
リポジトリに既にあるファイルを修正する
設定を変更しても、間違った改行コードですでにコミットされたファイルが魔法のように直るわけではありません。それらを「再正規化(renormalize)」する必要があります。このプロセスでは、Gitのインデックスをクリアし、新しいルールに従ってすべてのファイルをGitに再読み込みさせます。
- ディレクトリをクリーンにするため、現在の作業をコミットまたはスタッシュ(退避)してください。
- 以下の3つのコマンドを順番に実行してください:
# 1. キャッシュされたインデックスをクリアする
git rm --cached -r .
# 2. すべてを再追加する(ここでGitが新しい改行ルールを適用します)
git add .
# 3. 修正を確定させる
git commit -m "Style: すべての改行コードをLFに正規化"
変更を確認する方法
以下のコマンドを実行して、現在有効な設定を確認します:
git config --get core.autocrlf
VS Codeを使用している場合は、ステータスバーの右下を確認してください。現在編集中のファイルについてCRLFまたはLFが表示されます。上記の正規化手順を実行した後、以前LFと表示されていたファイルは、autocrlfがtrueに設定されていれば、Windowsマシン上ではCRLFと表示されるはずです。
クイック比較表
設定
コミット時
チェックアウト時
最適な用途
`true`
LFに変換
CRLFに変換
Windowsユーザー
`input`
LFに変換
変更なし
Mac/Linuxユーザー
`false`
変更なし
変更なし
Windowsのみのチーム

