gpt4 book ai didi

git - 打开 repo 文件而不是 tmp 文件以在 git difftool 中修改

转载 作者:太空狗 更新时间:2023-10-29 14:16:36 25 4
gpt4 key购买 nike

git difftool --tool=vimdiff --no-prompt HEAD~1 HEAD

git 打开vim 时会在左右两个临时文件。有没有办法强制打开右边的repo文件,让我直接修改?

最佳答案

否:因为您选择了两个特定的提交,所以没有要更改的文件

这么说似乎有点奇怪。它实际上有点奇怪,直到您意识到关于提交的事情:虽然提交确实包含文件,但1它们包含的文件卡住。它们都不能改变。它们是提交的,任何提交的内容都与提交本身一样永久,2 并且完全只读。

当然,当您使用 Git 时,您有可以更改的文件。如果没有,Git 将很难使用。但那些不是提交 文件:那些是工作树 副本。如果您指示 git difftool --tool=vimdiff 使用这些文件作为操作的一方面,它已经直接打开了这些文件。为此:

git difftool --tool=vimdiff <options> <commit>

例如,其中 <options> 包含您的 --no-prompt,而 <commit> 可能又是 HEAD~1

(与 git diff 一样,可以告诉 git difftool 比较两个提交,或将一个提交与当前工作树进行比较。没有将提交与当前 索引 内容进行比较的选项。这个答案的其余部分没有提到索引,但索引包含每个文件的 third 副本。提交中的文件采用特殊的、只读的、Git-only 格式。你工作中的文件-tree 是一种有用的格式,因此您可以直接阅读或编辑它们。index 中的文件位于中间区域,介于它们被卡住的 HEAD 提交和工作树之间它们是正常的:索引副本未卡住,但仍然是 Git-only 和压缩的。Git 从索引副本进行 提交,这就是为什么你必须一直运行 git add 的原因。)


1从技术上讲,提交并不包含文件,而是引用文件。文件使用一系列间接存储:提交指向 tree 对象,它给出文件的名称、模式和内容的哈希 ID;然后树中的哈希 ID 指向保存文件内容的 Git blob 对象。这允许两个不同的树(可能具有不同的模式或不同的文件集)重新使用现有的卡住文件内容,并允许不同的提交(可能具有不同的作者或时间戳)重新使用现有的卡住树,重新使用现有的卡住文件提交。这只是 Git 用来节省大量空间的几个技巧之一,即使每个提交都存储了每个文件的完整和完整的副本:在幕后,有大量旧文件的重用。

2一个提交通常永远存在,但是如果每个人都有一些提交——由一些哈希 ID 标识——同意永远停止使用该提交并将其删除在历史列表中,Git 最终会忘记真正的提交。如果有人不同意,他们可以很容易地重新引入提交,事实上,这是默认的。因此,提交一旦传播到其他 Git 存储库就很难永久删除,因为要永久删除它们,您必须将它们从每个拾取它们的 Git 存储库中删除。

关于git - 打开 repo 文件而不是 tmp 文件以在 git difftool 中修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53311092/

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