git に登録済みのファイルの改行コードを正規化する
背景
Windows や Linux で各自改行コードに関して特に意識することなく登録した場合に改行コードがばらばらになってしまう場合があります。
core.autocrlf
を正しく行っていたとしても、例えば Linux 向けのファイルを Windows のエディタで編集してそれを samba 経由で Linux にコピーしてコミットした場合など、改行コードが意図しないものになってしまうことがあります。
これを防ぐための仕組みとして .gitattributes
というファイルにバイナリ/テキストファイルの指定および改行コードの種類を拡張子ごとに指定するものがあります。
これを使えば、 .gitattributes
ファイル登録後に、追加したファイルに関しては改行コードを正規化することができます。
.gitattributes
ファイル登録前に登録したファイルに関しては変更されないので、それを正規化するコマンドを紹介します。
.gitattributes
のコミット
準備として .gitattributes
を作成してコミットします。
git リポジトリのトップに .gitattributes
というファイル名で例えば以下のような内容で作成して git add
して git commit
します。
*.txt text eol=lf
これは txt の拡張子を持つファイルはテキストファイルで、改行コードは常に LF と指定するものです。
改行コードの正規化するコマンド
Git 2.16 以降を使っている場合
以下コマンドを実行すると、カレントディレクトリ以下のファイルに対して、.gitattributes
ファイルに基づいて改行コードの正規化を行い、index に登録した状態になります。
git add --renormalize .
この後、git status
で変更されたファイルを確認後 git commit
すれば改行コードの正規化を行うことができます。
Git 2.16 以前を使っている場合
Git: how to renormalize line endings in all files in all revisions? によると以下のようにやるみたいです。
git read-tree --empty
git add .