在命令行Git中,show
、diff
和log
命令可以选择--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
";?