[git] LF would be replaced by CRLF エラー

症状

ステージングへのファイル追加 (git add) において "LF would be replaced by CRLF in xxx" エラーが発生して失敗する。

 

エラー発生例

 

エラーの原因、背景

ステージング (git add) を試みたファイルの改行コード形式がLFであった。もし、このままステージングを許してチェックアウトするとステージング前の改行コード形式がLFで、チェックアウト後の改行コード形式が自動変換の結果 CRLFとなり一致しない。ステージング前と後でファイルが一致しない(改行コードが異なる)のは "宜しくない" 。そこで、git add コマンドはエラーに倒してステージングを失敗させます。

 

解決方法1 : 改行コード形式にこだわりのないテキストファイルのとき

エラーが発生したテキストファイル(たとえば readme.txt)の改行コードをCRLF形式に変換した後に、あらためてステージングを試みる。こうすると、ステージング前もチェックアウト後も改行コード形式はCRLF形式で一致するため、git addコマンドはエラー判定しない。ただし、gitコマンドの背景ではリポジトリに投入するときに LF形式 ⇒ CRLF形式、リポジトリから取り出すときに CRLF形式 ⇒ LF形式 の自動改行コード変換が走っていることに留意する必要があります。留意する必要はありますが、そもそもテキストファイルの改行コード形式にこだわりがないのであれば悪影響はないでしょう。

解決方法2 : 自動改行コード変換を回避したいとき

Gitリポジトリへの投入/取出の過程で自動的にテキストファイルの改行コード変換 LFCRLF が実行されることを避けたいとき

1. 一部のファイル限定で自動改行コード変換を回避する

たとえば、拡張子 json 限定で自動改行コード変換を回避する。たとえば *.json に対して.gitattributesファイルに次のように binary属性 を設定する。binary属性が設定されたファイルは無条件で自動改行コード変換の対象から外される。一方で、EXCELファイル(*.xlsx)などはbinary属性を設定していないばあいでも、gitがbinaryファイル(自動改行コード変換対象外)と自動判定する。自動判定の精度が心配であれば *.xlsx などにもbinary属性を設定するのが確実である。

2. 全てのファイルで自動改行コード変換を回避する

 

補足

Linux や MacOS のテキストファイルの改行コードはデフォルトで LF形式 である。したがって上記の自動改行コード変換の対象外である。Windowsプラットフォーム上で動作する Git ツール だけが自動改行コード変換の機能を有しており、その結果、件名の不具合が発生するばあいがある。