如何为gitk添加更好的副本检测



在命令行Git中,showdifflog命令可以选择--find-copies-harder

有没有办法让gitk也使用这个?我不时地需要这个,而且我的项目足够小,所以我不在乎性能的降低。

(我不想再通过伪造历史来强制复制检测了。(

我注意到--find-copies-harder出现在gitk代码中,但我不明白为什么。所以我尝试了命令行gitk --all --find-copies-harder,但它不起作用:在从另一个版本的文件复制新文件的提交中,gitk仍然没有显示这个文件被复制的事实。

更新:通过在字段Additional arguments to git log:中输入--find-copies-harder来编辑视图也没有效果:复制的(经过轻微修改的(文件仍然没有显示为已复制,而在命令行git show --find-copies-harder中则是。

必要的更改是:

diff --git a/gitk-git/gitk b/gitk-git/gitk
index 23d9dd1fe0..a98a115080 100755
--- a/gitk-git/gitk
+++ b/gitk-git/gitk
@@ -7909,7 +7909,7 @@ proc diffcmd {ids flags} {
if {$log_showroot} {
lappend flags --root
}
-        set cmd [concat | git diff-tree -r $flags $ids]
+        set cmd [concat | git diff-tree --find-copies-harder -r $flags $ids]
}
return $cmd
}

这样,gitk在下面的测试库的第二次提交中显示副本

git init
echo "a file" > a
git add a
git commit -m "a file"
cp a b
git add b
git commit -m "a copy"

根据需要:

-------------------------------------- b --------------------------------------
similarity index 100%
copy from a
copy to b

但请注意,可能会有意外的副作用,因为修改后的过程"diffcmd"在几个地方被调用。我没有系统地测试所有这些代码路径。

(我还向Git邮件列表发送了这个补丁的通用版本。(

如果不以某种方式修补gitk源代码本身,这似乎是不受支持的。

例如,在Git邮件列表中,2020年2月有一个类似的请求

截至提交c1a63459ed73("gitk:退出时保留窗口维度当不使用ttk主题时";,2019-12-15,Git v2.29.0-rc0(,gitk似乎缺少两个我认为";杀手;一个,用于查看修补程序(包括我自己的修补程序补丁(:

  • 对";CCD_ 13";("-W"(选项
  • 支持";CCD_ 15";(又称"diff.orderFile"(设置

事实上,gitk源代码中提到了这些标志,可以追溯到历史提交ee66e089c1d4("gitk:让更新更快",2008-05-09,Git v1.5.6-rc0(。

这些选项被隐藏在vdflags($n)中,然后被立即忽略
一条评论说,"这些请求或影响diff输出,而我们没有"想要";,我不明白为什么;我非常喜欢它们,请:(

有人可以写CCD_ 20补丁来纪念";CCD_ 21";以及";--function-context";?

相关内容

  • 没有找到相关文章

最新更新