验证补丁仅包含移动

时间:2011-11-25 17:26:28

标签: git version-control refactoring diff git-diff

我一直在重新组织一些代码,并希望使用一个程序来验证diff只包含匹配的添加和删除对。我使用git作为源代码控制,所以希望git中有一些东西可以为我做这个吗?如果它可以总结出现或消失的行

,那将非常有用

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

4 个答案:

答案 0 :(得分:1)

虽然它确实是一个有用的功能,但并不知道这样的工具。在Windows上,您可以使用已移动线条检测的WinMerge。否则,此related question可能会有所帮助。

答案 1 :(得分:1)

正如普鲁斯万所说 - 我认为目前不存在工具。但是git可以检测重命名,并且检测文件的变化应该不难。 -M选项还可以尝试检测重命名,而不仅仅是执行删除/添加差异。

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

答案 2 :(得分:1)

您没有说出您正在使用的计算机语言。

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

如果你的文件中的编辑只是整个编程结构的移动,那么SmartDifferencer可能会告诉你这一点。

答案 3 :(得分:1)

另一种方法是视觉方法,可以使用Git 2.14.x / 2.15(2017年第3季度),因为“git diff”已被教导可选择绘制新的线条 与其他地方删除的行相同,与真正的新行不同 线

换句话说:移动行的专用颜色

请参阅commit 61e89eacommit 86b452ecommit 176841fcommit 2e2d5accommit e6e045fcommit 146fdb0commit 30b7e1e,{{3} },commit bd03329commit 0911c47commit 4eed0ebcommit f359713commit 5af6ea9commit 4acaaa7commit a29b0a1commit 3ee8b7bcommit f2bb121commit ff95867commit 091f8e2commit b9cbfde(2017年6月30日)commit 68abc6f
Stefan Beller (stefanbeller)于2017年8月27日Junio C Hamano -- gitster --合并)

commit b6c4058

diff.colorMoved
  

如果设置为有效<mode>或真值,则差异中移动的线的颜色会有所不同,有效模式的详细信息git config documentation now includes
  如果只设置为true,将使用默认颜色模式   设置为false时,移动的线条不会着色。

有关详情,请参阅see '--color-moved' in git-diff