fer*_*ind 5 git git-checkout core.autocrlf git-show
我想将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将其签出到另一个文件夹.
你说得对, \xe2\x80\x93git show只是向你展示了 repo \xe2\x80\x93 中的 \xe2\x80\x99s,没有结账魔法发生。
您可以通过临时更改结账工作目录的位置来实现您想要的目的
\n\ngit --work-tree=/home/user checkout HEAD~1 crlf.txt\nRun Code Online (Sandbox Code Playgroud)\n\n这会将文件检出到/home/user/crlf.txt. 注意:如果您签出子目录中的文件,该目录也将在目标文件夹中创建。您无法阻止这种情况,也无法指定目标文件的文件名。如果这是一个问题,您应该编写一个 2 行 shell 脚本,该脚本将签出到临时目录,然后移动签出的文件。
| 归档时间: |
|
| 查看次数: |
1165 次 |
| 最近记录: |