我想将 git 存储库中的单个文件检出到不同的位置(工作目录除外),并保持当前工作目录不变。我希望 git 以正确的行结尾签出我的文件。
我在 Windows 上工作,但我在 Linux 上也有同样的问题。
这是我的场景(Win7 64 位):
首先,我确保 git 在提交时将 CRLF 转换为 LF,在结帐时将 LF 转换为 CRLF:
git config --local core.autocrlf true
然后我创建一个名为 crlf.txt 并带有 CRLF 行结尾的文件并提交它:
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 将其签出到不同的文件夹。