2015-11-08 3 views
7

私のテキストファイルでは、大きなセクションを頻繁に移動します。言い換えれば、私はどこからでも3行から50行までのセクションを切り取り、それをファイルのどこかにそのまま貼り付けます。下追加された行と削除された行を比較するための外部git diffの書き方(一致を隠す)?

「コミットされていない変更は、」Gitは(私のGithub OSXを使用)ファイルの一部に「削除」されるものとして、これらのラインを表示し、別の「添加します」。 Gitリポジトリの差分表示が、私は単にある場所から別の場所に移動した私のセクションのハイライト表示されなかった場合、私のワークフローを考える

、それははるかに参考になります。代わりに、私はGitに完全に新しい行だけを強調表示し、ファイルから完全に削除した行を強調したい。ファイルのどこかで同じ "追加"セクションが見つかると、Gitの差分表示に3行以上の "削除された"セクションを無視する方法がありますか?

現在、私はwdiff = diff-highlightを使用しています。

UPDATE:誰でもセクションに「削除」のセクションでは、(行を無視して「追加」と、外部のgit diffが最初に壊れていない

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

と:それは外部のGitの差分を指定することは簡単ですように見えます追加された行が削除された行と一致するセクションを自動的に非表示にしますか?

+2

ないが、あなたはgitのを持つことができます「外部差分」を使用します。それでも、このようなdiff(これはコメントであり、答えではない理由です)を見つけること(または書くこと)の問題が残っています。 – torek

+1

私がこのような状況で使うトリックは、比較の前に何らかの形でテキストファイルを "標準的"にすることです。通常、ソートして並べ替えられたファイルを比較します。インデントの削除や句読点が必要な場合もあります。 –

+0

@torekプログラマがこのような差分を書くのはどれくらい難しいでしょうか? Github Desktop OSXやSourcetreeのようなGUIクライアントが書かれれば、外部の差分を使うことができますか? – incandescentman

答えて

2

手順の概要

  1. diffプログラムを - 新しいdiffプログラムを使用して
  2. を並べ替えラインを理解して1 - セットあなたのgitの設定

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" 

が、これはどのようなdiffが希望の出力対出力の例です:

my_diff_tool明らか

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. 

、向上させることがたくさんあります。たとえば、セットは重複する行を無視します。並べ替えを設定するので、新しい行がたくさんある場合は分かりにくいです。

これらの改善は、読者への課題として残されています。新しいツールを使用するようにGitの設定を設定する新しい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

関連する問題