步骤概述:
- 一个理解行重新排序的diff程序
- 使用新的diff程序-设置您的git配置
一个diff程序:
事实证明,git将使用以下参数调用您的diff程序:
> my_diff_tool <filename> <old_location> <old_hash> <old_mode> <new_location> <new_hash> <new_mode>
下面是最简单的差异比较工具,它能做到与您想要的功能接近。它读取文件,然后使用集合比较打印出新旧行。
import sys
old = open(sys.argv[2]).read().splitlines()
new = open(sys.argv[5]).read().splitlines()
print "-"* 80
print "Filename: %s" % sys.argv[1]
for line in set(old) - set(new):
print '- %s' % line
for line in set(new) - set(old):
print '+ %s' % line
if set(new) == set(old):
print "Text reordering only"
这是一个示例,展示了它输出的内容与diff输出的内容之间的区别:
我的diff工具
Filename: test.txt
- luctus pellentesque.
+ luctus pellentesque. Puric huma te.
差异
diff --git a/test.txt b/test.txt
index 2ec8f4b..797e2ad 100644
--- a/test.txt
+++ b/test.txt
@@ -4,15 +4,15 @@ dolor quis feugiat. Nullam vel interdum leo, a placerat elit. Mauris quis
faucibus dui.
Nullam eu sapien quis ex convallis tincidunt. Mauris tristique mauris ac
-luctus pellentesque.
+luctus pellentesque. Puric huma te.
Duis at imperdiet lacus. Sed malesuada elit vitae arcu semper, at fringilla
purus rhoncus. Sed vestibulum pellentesque libero in interdum. Fusce elementum
ornare vulputate.
+Nam sed enim at nisi tincidunt accumsan eu nec nisl. Duis suscipit hendrerit
+fermentum. Sed mattis purus congue velit aliquet, non placerat lectus varius.
+
Donec placerat, purus ac aliquet ullamcorper, elit leo accumsan ante, sed
lacinia leo sem sed metus. Morbi lacinia porttitor ante, eget consequat
libero accumsan in. Nunc sit amet lectus magna.
-
-Nam sed enim at nisi tincidunt accumsan eu nec nisl. Duis suscipit hendrerit
-fermentum. Sed mattis purus congue velit aliquet, non placerat lectus varius.
显然,还有很多需要改进的地方。例如,集合将忽略重复行。集合也会重新排序,如果有大量的新行,这会使理解更加困难。
这些改进留给读者自己练习。
使用新diff程序
将git配置设置为使用新工具很容易。您也可以像上面所示的那样修改您的.gitconfig
文件。
> git config diff.external /location/to/your/diff/tool/my_diff_tool
您需要确保您的diff工具是可执行的,否则您将会得到一个错误提示(fatal: cannot exec '/location/to/your/diff/tool/my_diff_tool': Permission denied
),因此:
> chmod +x /location/to/your/diff/tool/my_diff_tool