|
|
1
2
TL;博士
这里有两种选择:要么进行多个提交,在每个步骤中进行较小的更改。或者,使用
长的这从根本上说是一个关于 The Ship of Theseus ,或祖父的斧头悖论。(“这是我祖父的斧头。我父亲换了柄,我换了头,但它是同一把斧头。还是?” 你 知道文件“old.name”被(1)重命名为“new.ext”,并且(2)在时间点A和时间点B之间进行了大量更改,因此即使整个名称不同,大部分内容也不同,我们还是应该称它为“同一”文件?嗯,可能是你自己重新命名的,所以当然 你
最后一个问题的答案是
不
,Git不会知道。简单地说
不记录
这个信息。Git只是制作和使用快照。快照
有
Git所做的是(尝试)
发现
在这种情况下,文件可能被重命名(也可能被修改)。如果您要求Git这样做,Git将比较 目录 全部的 位于右侧而非左侧的文件。对于内容足够相似的任何两个文件,Git都会为这对文件分配一个“相似性分数”,Git将其表示为一个百分比,一个介于0%(完全不相似)和100%(完全相同)之间的数字。 100%相同的案例特别有用,因为它保证工作并且非常快。 2. 所以如果你 档案 根本不改变 完成中间提交后,您可以对重命名的文件进行七次大规模更改,然后再进行一次提交。当Git比较父提交和子提交时,所有文件都具有相同的属性 ,即使其中一些文件的内容发生了巨大的变化,Git也可以为您提供一个文件到一个文件的差异,以供配对文件使用 改名。(再次参见脚注1。)
这
不会
比较第一个快照(重命名前)和最后一个快照(重命名后)时的帮助
后大变革。它只会帮助你重新命名为后重命名,然后作为第二步,后重命名为后大规模更改;或者等效地,一次一个地向后提交,就像Git通常做的那样。所以这对以后的工作没有多大帮助
适用于不适用的情况,包括
在重命名的文件中,很难说这两个文件是相似的。但Git将尝试任何方式,它将尝试所有可能的配对。 3. 最好的匹配,不管是什么,都要选一个, 只要 它符合或超过标准 与您指定的匹配。这一最低标准默认为50%。
当你跑的时候
两种比较都启用了重命名检测,并将其设置为50%。没有改变这一点的选项。
索引和工作树都不是实际的提交,因此您不能完全将它们交给
添加
注意
2. Git通过散列ID存储每个内容,因此检测提交A中名为X的文件与提交B中名为Y的文件100%相同只需查看散列ID即可。如果哈希ID匹配,则文件也匹配。找到了这些100%相同的内容匹配项后,Git现在将A:X与B:Y配对,这两个名称不再位于“要配对的文件”池中。 请注意,虽然这很快、很容易并且保证可以工作,但如果还有一个B:Z与a:X 100%相同,则无法确定a:X是否将和B:Y或B:Z匹配。在这里,除了名称检测之外,您可能希望启用Git的 复制 检测,这样Git就可以说A:X得到了 抄袭 对于B:Y和B:Z。这里的细节,交互,变得有点复杂。
事实上,Git尝试的配对数量是有限制的。重命名检测代码有两个文件名队列:
左路无人匹敌
和
右翼无与伦比
计算上非常昂贵。因此Git有一个名为
|
|
Harry · 如何在编译时获取克隆的git仓库的标签 1 年前 |
|
Ooker · 如何从blob中删除秘密? 1 年前 |
|
|
hasdrubal · git日志图智能分支过滤器 1 年前 |
|
|
J. Doe · 为什么git中没有跟踪git文件? 1 年前 |