- 空のローカルリポジトリを用意する。
core.autocrlfをfalseに設定する。- 改行コードがCRLFのファイルをaddしてcommitする。ここではBOMなしUTF-8かつCRLFの
hello.cを登録したと仮定する。 .gitattributesをaddしてcommitする。中身は*.c text eol=crlf encoding=utf-8-dosとしておく。- 手動で
hello.cを削除した後に、git checkout .でhello.cを復活させる。 git statusやgit diffなどでhello.cの状態を確認する。
よくよくgitattributesのドキュメントを読み解いてみれば、予期された挙動ではある気がするが……。
教訓 (1):.gitattributesを用いてテキストファイルの改行コードを細かく指定するならば、真っ先に.gitattributesをリポジトリに登録しておくこと。
教訓 (2):やらかしてしまった場合には、以下の手順で対処すること。
- 一時的に
.gitattributesを編集して改行コードの指定を無効化する。今回の例では*.c text eol=crlf encoding=utf-8-dosの行をコメントアウトすればよい(この変更はcommitしないでおく。) - 問題となっているファイル(今回の例では
hello.c)の改行コードをLFに変換してcommitする。 .gitattributesの内容を元に戻す。- commitしたファイル(今回の例では
hello.c)を手動で削除した後、git checkout .などで復活させる。