我想将git存储库中的单个文件签出到不同的位置(除了工作目录)并保留当前正在工作的目录.我希望git以正确的行结尾检查我的文件.
我在Windows上工作,但我在Linux中也有同样的问题.
这是我的场景(Win7 64位):
首先,我确保git在提交时将CRLF转换为LF,在结帐时将LF转换为CRLF:
git config --local core.autocrlf true
Run Code Online (Sandbox Code Playgroud)
然后我创建一个名为crlf.txt的文件,其中包含CRLF行结尾并提交它:
git add crlf.txt
git commit -m "File with crlf"
Run Code Online (Sandbox Code Playgroud)
我在crlf.txt中更改了一些内容并提交它:
git add crlf.txt
git commit -m "Change in crlf.txt"
Run Code Online (Sandbox Code Playgroud)
现在我想得到像第一次提交时的crlf.txt:
git show HEAD~1:crlf.txt > "/home/user/crlf_like_in_head-1.txt"
Run Code Online (Sandbox Code Playgroud)
文件"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
Run Code Online (Sandbox Code Playgroud)
但它覆盖了工作目录中crlf.txt的当前内容(如果crlf.txt处于脏状态),我也无法通过git checkout将其签出到另一个文件夹.