単一のファイルを git リポジトリから別の場所 (作業ディレクトリ以外) にチェックアウトし、現在の作業ディレクトリをそのままにしたいと考えています。そして、gitに正しい行末でファイルをチェックアウトさせたいです。
私はWindowsで作業していますが、Linuxでも同じ問題があります。
これが私のシナリオです(Win7 64ビット):
最初に、git がコミット時に CRLF を LF に変換し、チェックアウト時に LF を CRLF に変換することを確認します。
git config --local core.autocrlf true
次に、CRLF 行末を持つ crlf.txt というファイルを作成し、コミットします。
git add crlf.txt
git commit -m "File with crlf"
crlf.txt で何かを変更してコミットします。
git add crlf.txt
git commit -m "Change in crlf.txt"
今、最初のコミットのように crlf.txt を取得したい:
git show HEAD~1:crlf.txt > "/home/user/crlf_like_in_head-1.txt"
ファイル「crlf_like_in_head-1.txt」には、CRLF は含まれていませんが LF が含まれています。リポジトリにあるようにファイルの内容を表示するため、git show は正しいと思います (core.autocrlf=true は CRLF を LF に変換します)。ドキュメントからそれを知っており、core.autocrlf = falseで同じことを試しました。core.autocrlf=false を使用すると、「crlf_like_in_head-1.txt」に CRLF が含まれます。LF を CRLF に簡単に変換できることはわかっていますが、結果ファイルが git でチェックアウトされたものと同じであることを確認する必要があります。
git checkout を使用して単一のファイルをチェックアウトすることもできます。
git checkout HEAD~1 crlf.txt
しかし、作業ディレクトリにある crlf.txt の現在の内容が上書きされ (crlf.txt がダーティ状態の場合も)、git checkout を使用して別のフォルダーにチェックアウトできません。