我一直在重新组织一些代码,并希望使用一个程序来验证diff只包含匹配的添加和删除对。我使用git作为源代码控制,所以希望git中有一些东西可以为我做这个吗?如果它可以总结出现或消失的行
,那将非常有用有人知道是否有这样的工具吗?
答案 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 61e89ea,commit 86b452e,commit 176841f,commit 2e2d5ac,commit e6e045f,commit 146fdb0,commit 30b7e1e,{{3} },commit bd03329,commit 0911c47,commit 4eed0eb,commit f359713,commit 5af6ea9,commit 4acaaa7,commit a29b0a1,commit 3ee8b7b, commit f2bb121,commit ff95867,commit 091f8e2,commit b9cbfde(2017年6月30日)commit 68abc6f。
(Stefan Beller (stefanbeller
)于2017年8月27日Junio C Hamano -- gitster
--合并)
diff.colorMoved
如果设置为有效
<mode>
或真值,则差异中移动的线的颜色会有所不同,有效模式的详细信息git config
documentation now includes。
如果只设置为true
,将使用默认颜色模式 设置为false
时,移动的线条不会着色。
有关详情,请参阅see '--color-moved
' in git-diff
。