的步驟的輪廓
- 比較差異程序 - 一個能夠理解線重排序
- 使用新的diff程序 - 設定你的混帳配置
比較差異程序:
因此,原來git會打電話給你的差異PROGR我有以下論點:
> my_diff_tool <filename> <old_location> <old_hash> <old_mode> <new_location> <new_hash> <new_mode>
所以這裏是最簡單的可能的差異工具,做一些接近你想要的東西。它讀取文件,然後使用設置比較打印新行和舊行。
#!/usr/bin/python
import sys
old = open(sys.argv[2]).read().splitlines()
new = open(sys.argv[5]).read().splitlines()
print "-"* 80
print "Filename: %s" % sys.argv[1]
# Simple set method
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"
這裏是什麼這個輸出VS爲例什麼差異將輸出:
my_diff_tool
Filename: test.txt
- luctus pellentesque.
+ luctus pellentesque. Puric huma te.
DIFF
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程序
設置你的混帳配置爲使用新的工具很容易。您也可以修改您的.gitconfig
,如上所示。
> git config diff.external /location/to/your/diff/tool/my_diff_tool
你要確保你的比較工具是可執行的,否則你會得到一個錯誤(fatal: cannot exec '/location/to/your/diff/tool/my_diff_tool': Permission denied
)這樣:
> chmod +x /location/to/your/diff/tool/my_diff_tool
不能與內置的差異,但你可以有混帳使用「外部差異」。這仍然會發現(或寫作)這樣的差異(這就是爲什麼這是一個評論,而不是答案)的問題。 – torek
我在這種情況下使用的一個技巧是在比較之前以某種方式使文本文件「規範」。通常,我將它們排序並比較排序後的文件。在某些情況下,需要刪除縮進或一些標點符號。 –
@torek程序員編寫這樣的差異有多難?一旦寫入,像Github Desktop OSX或Sourcetree這樣的GUI客戶端能夠使用外部差異嗎? – incandescentman