我一直在重组一些代码,并想使用一个程序来验证差异是否仅包含匹配的添加和删除对。我正在使用 git 作为源代码控制,所以希望 git 中有一些内置的东西可以为我做到这一点?如果它可以总结已经出现或消失的线条,这也将非常有用
有人知道是否有这样的工具吗?
我一直在重组一些代码,并想使用一个程序来验证差异是否仅包含匹配的添加和删除对。我正在使用 git 作为源代码控制,所以希望 git 中有一些内置的东西可以为我做到这一点?如果它可以总结已经出现或消失的线条,这也将非常有用
有人知道是否有这样的工具吗?
你没有说你正在处理什么计算机语言。
我们的SmartDifferencer系列工具可能会提供帮助。这些工具比较编程语言的语法,以确定可通过程序员操作(复制、移动、重命名块中标识符)而不是行编辑操作来解释的术语的差异。
如果您的文件中的编辑真的只是整个编程结构的移动,SmartDifferencer 可能会准确地告诉您。
正如 prusswan 所说 - 我认为目前不存在工具。但是 git 可以检测重命名,并且检测文件的更改应该不难。-M 选项还 git 尝试检测重命名,而不仅仅是执行删除/添加差异。
git diff -M 18b5850a07bb
diff --git a/G b/G
index e69de29..d0a432b 100644
--- a/G
+++ b/G
@@ -0,0 +1 @@
+This is a change
diff --git a/A b/H
similarity index 100%
rename from A
rename to H
diff --git a/B b/I
similarity index 100%
rename from B
rename to I
diff --git a/C b/J
similarity index 100%
rename from C
rename to J
diff --git a/D b/K
similarity index 100%
rename from D
rename to K
diff --git a/E b/L
similarity index 100%
rename from E
rename to L
diff --git a/F b/M
similarity index 100%
rename from F
rename to M
不知道这样的工具,尽管它确实是一个有用的功能。在 Windows 上,您可以使用具有移动线检测功能的WinMerge 。否则,这个相关的问题 可能会有所帮助。
另一种方法是视觉方法,可以使用 Git 2.14.x/2.15(2017 年第三季度),因为 " git diff
" 已被教导可选择地绘制与其他地方已删除的行相同的新行,与真正的新行不同。
换句话说:移动线条的专用颜色
See commit 61e89ea , commit 86b452e , commit 176841f , commit 2e2d5ac , commit e6e045f , commit 146fdb0 , commit 30b7e1e , commit bd03329 , commit 0911c47 , commit 4eed0eb , commit f359713 , commit 5af6ea9 , commit 4acaaa7 , commit a29b0a1 , commit 3ee8b7b , commit f2bb121 , commit ff95867,提交 091f8e2,提交 b9cbfde,提交 68abc6f(2017 年 6 月 30 日),作者Stefan Beller(stefanbeller
)。
(由Junio C Hamano 合并 -- gitster
--在提交 b6c4058中,2017 年 8 月 27 日)
diff.colorMoved
如果设置为有效值
<mode>
或真值,则 diff 中移动的行颜色不同,有关有效模式的详细信息,请参阅 '--color-moved
' ingit-diff
。
如果简单地设置为true
,将使用默认颜色模式。
当设置为 时false
,移动的线不着色。
有关更多信息,请参阅提交 2e2d5ac。