Thi*_*ilo 29 git version-control dvcs
显然,当您将函数从一个源代码文件移动到另一个源代码文件时,git修订日志(对于新文件)可以显示该代码片段最初来自何处(请参阅本教程中的"查看历史记录"部分).
这是如何运作的?
Jör*_*tag 44
它不跟踪它们.这就是它的美丽.
Git只记录整个项目树的快照:这是所有文件在提交之前的样子,以及它们之后的样子.我们如何从这里到那里,Git并不关心.
这允许在提交已经发生之后写入智能工具,以从该提交中提取信息.例如,通过将所有已删除文件与所有新文件进行比较并比较成对相似度量,完成Git中的重命名检测.如果相似性度量大于x,则认为它们被重命名,如果它在y和x(y < x)之间,则认为是重命名+编辑,如果它在下面y,则认为它们是独立的.很酷的是,作为"提交考古学家",你可以在事后指明什么x和y应该是什么.如果提交只记录"此文件是该文件的重命名",则无效.
检测移动的内容的工作方式类似:您将每个文件切片,计算所有切片之间的相似性度量,然后可以推断出此处删除的切片以及此处添加的这个非常相似的切片实际上是移动的相同切片从这里到那里.
然而,正如tonfa在他的回答中提到的,这是非常昂贵的,所以通常不会这样做.但它可以做到,这就是重点.
BTW:这与Google Wave,EtherPad,Gobby,SubEthaEdit,ACE和Co.使用的运营转型模型完全相反.