2015-11-08 48 views
7

在我的文本文件,我經常走動大的部分。換句話說,我將一段長度爲3到50行的段切下,然後在文件的其他地方將其粘貼。如何編寫一個外部的git diff比較添加的行到刪除的行(並隱藏匹配)?

在「未提交的變化,」 GIT中(I使用Github的OSX)顯示這些行作爲在該文件的一個部分「已刪除」,而在另一個「添加的」。

由於我的工作流程,如果Git的差異顯示並沒有突出了我的部分,我已經搬到只是從一個地方到另一個地方會更加有幫助。相反,我希望Git只突出顯示全新的行和我從文件中完全刪除的行。 (以及我已經改變了某些部分的行)。

如果在文件的其他地方找到相同的「添加」部分,是否有辦法指示Git的差異顯示忽略3行以上的「已刪除」部分?

目前我使用wdiff = diff-highlight

更新:它看起來像指定外部git的差異非常簡單:

gitconfig 
[diff] 
    external = ~/prose-diffs.py 

沒有人有一個外部git的差異是比較「補」部分以「刪除」部分(忽略換行的開頭和結束),並自動隱藏添加的行與刪除的行匹配的任何部分?

+2

不能與內置的差異,但你可以有混帳使用「外部差異」。這仍然會發現(或寫作)這樣的差異(這就是爲什麼這是一個評論,而不是答案)的問題。 – torek

+1

我在這種情況下使用的一個技巧是在比較之前以某種方式使文本文件「規範」。通常,我將它們排序並比較排序後的文件。在某些情況下,需要刪除縮進或一些標點符號。 –

+0

@torek程序員編寫這樣的差異有多難?一旦寫入,像Github Desktop OSX或Sourcetree這樣的GUI客戶端能夠使用外部差異嗎? – incandescentman

回答

2

的步驟的輪廓

  1. 比較差異程序 - 一個能夠理解線重排序
  2. 使用新的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 
+1

有趣的方法。 +1 – VonC

相關問題