gpt4 book ai didi

git - 当我使用 git 将单个文件 check out 到不同位置时,如何保留行尾?

转载 作者:太空狗 更新时间:2023-10-29 13:26:43 25 4
gpt4 key购买 nike

我想从 git 存储库中 check out 一个文件到不同的位置(工作目录除外)并保持我当前的工作目录不变。我希望 git 以正确的行结尾 check out 我的文件。

我在 Windows 上工作,但在 Linux 上也有同样的问题。

这是我的场景(Win7 64 位):

首先,我确保 git 在提交时将 CRLF 转换为 LF,在 checkout 时将 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 checkout 的文件相同。

我知道我也可以使用 git checkout checkout 单个文件:

git checkout HEAD~1 crlf.txt

但它会覆盖工作目录中 crlf.txt 的当前内容(如果 crlf.txt 处于脏状态)并且我无法使用 git checkout 将其 check out 到不同的文件夹。

最佳答案

你没看错——git show 只是向你展示了存储库中的内容——没有发生 checkout 魔术。

您可以通过临时更改 checkout 的工作目录位置来实现您想要的

git --work-tree=/home/user checkout HEAD~1 crlf.txt

这会将文件 check out 到 /home/user/crlf.txt注意:如果您 checkout 子目录中的文件,该目录也会在目标文件夹中创建。你不能阻止它,也不能指定目标文件的文件名。如果这是一个问题,您应该编写一个 2 行 shell 脚本,将 checkout 到临时目录,然后移动 checkout 的文件。

关于git - 当我使用 git 将单个文件 check out 到不同位置时,如何保留行尾?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13660292/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com