4月
24
手元 git リポジトリは歴史的経緯により改行コードが内部でも CRLF になってしまっているものがたくさんあるんですが、それを LF にする方法です。
まず専用の作業ディレクトリに clone します。
~$ git clone .../example.git ~$ cd example ~/example$
git の設定の core.autocrlf
が false
になっているor全く設定されていない(デフォルトが false
なので)環境であることを確認します。例えば普通の Linux (Unix) 環境です。WSL 環境は知らない。
~/example$ git config -l | grep core.autocrlf ~/example$
(何も出てこない = デフォルト = false
)
input
や true
になっている場合は、false
にしてからファイルを一旦削除して checkout しなおします。
~/example$ git config --local core.autocrlf false ~/example$ find . -mindepth 1 -maxdepth 1 -not -path './.git' # 意図しないファイルを削除しないか確認 ~/example$ find . -mindepth 1 -maxdepth 1 -not -path './.git' -print0 | xargs -0 rm -rf # 一旦削除 ~/example$ git reset --hard HEAD # リポジトリから復元 ~/example$
CRLF なファイルを確認して LF に変換します。
~/example$ find . -type f -not -path './.git/**' # ファイル一覧の確認 ~/example$ find . -type f -not -path './.git/**' -print0 | xargs -0 file | grep CRLF # CRLF なテキストファイルの確認 ~/example$ find . -type f -not -path './.git/**' -print0 | xargs -0 file | grep CRLF | awk -F: '{print $1}' # ファイル名だけ切り出されていることを確認 ~/example$ find . -type f -not -path './.git/**' -print0 | xargs -0 file | grep CRLF | awk -F: '{print $1}' | xargs -n1 perl -i -pe 's/\r\n/\n/' # 実際に変換 ~/example$ find . -type f -not -path './.git/**' -print0 | xargs -0 file | grep CRLF # 出てこない = 全部変換されたことを確認 ~/example$ git diff | less -R # less の実装によっては CR が消えていることを表示できる
ファイルの確認時にコロンを含むファイル名があったり余計なファイルが出て来たりする場合は適当にがんばりましょう。
(CRLF になってるということは普通は Windows で編集したことのあるファイルのはずなのでコロンを含むことはないと思いますが)
でもって commit & push
~/example$ git commit -a -m 'convert CRLF to LF' ~/example$ git push
no comment untill now