2

我一直在重组一些代码,并想使用一个程序来验证差异是否仅包含匹配的添加和删除对。我正在使用 git 作为源代码控制,所以希望 git 中有一些内置的东西可以为我做到这一点?如果它可以总结已经出现或消失的线条,这也将非常有用


有人知道是否有这样的工具吗?

4

4 回答 4

1

你没有说你正在处理什么计算机语言。

我们的SmartDifferencer系列工具可能会提供帮助。这些工具比较编程语言的语法,以确定可通过程序员操作(复制、移动、重命名块中标识符)而不是行编辑操作来解释的术语的差异。

如果您的文件中的编辑真的只是整个编程结构的移动,SmartDifferencer 可能会准确地告诉您。

于 2011-11-26T18:24:52.980 回答
1

正如 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
于 2011-11-25T19:06:04.500 回答
1

不知道这样的工具,尽管它确实是一个有用的功能。在 Windows 上,您可以使用具有移动线检测功能的WinMerge 。否则,这个相关的问题 可能会有所帮助。

于 2011-11-25T18:51:37.623 回答
1

另一种方法是视觉方法,可以使用 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 日)

git config文档现在包括

diff.colorMoved

如果设置为有效值<mode>或真值,则 diff 中移动的行颜色不同,有关有效模式的详细信息,请参阅 ' --color-moved' ingit-diff
如果简单地设置为true,将使用默认颜色模式。
当设置为 时false,移动的线不着色。

有关更多信息,请参阅提交 2e2d5ac

于 2017-09-04T19:47:49.517 回答