2009-10-16 13 views
13

Wenn ich 'svn diff' von der Befehlszeile verwendet, druckt es die Zeilen, die geändert haben, aber auch die 3 unveränderten Zeilen vor und nach Kontext. Ich bevorzuge es, nur die geänderten Linien ohne Kontext zu sehen. Ich war nicht in der Lage, Befehlszeilenoptionen zu bestimmen, mit denen ich mich so verhalten kann. Standard 'diff' und 'cvs diff' machen das, was ich will. Sicher 'svn diff' kann das, aber ich vermisse etwas. Wer weiß wie?So erhalten Sie NO Kontext bei der Verwendung von Svn diff

Antwort

17

Nach dem Blick in den oben genannten nützlichen Link durch abwickeln, ist die kurze Antwort, dass Svn gebaut ist -in diff kann nicht tun was ich will. Sie können ihm sagen, dass er das externe Standard-Diff verwenden soll und Args an das übergeben soll, um ihm mitzuteilen, dass Sie keinen Kontext wollen. Ich habe die folgenden Alias ​​in meinem .bashrc und alles funktioniert jetzt auch, wenn ich, dass statt:

alias svndiff='svn diff --diff-cmd=diff -x -U0' 
+2

'-x' ist der Erweiterungsparameter für' svn diff', er bewirkt das unmittelbar folgende Token, hier '-U0', an an den diff-Befehl übergeben werden, der mit '--diff-cmd' angegeben wurde, hier' diff'. – valid

2

This thread scheint zu der Schlussfolgerung zu kommen, dass Sie einen externen Diff-Befehl verwenden sollten, um die Menge des Kontexts zu steuern.

I Unified Diffs bevorzugen, so dass immer meine Finger

svn diff -x -u 

geben, was bedeutet, dass ein externer (GNU diff) Befehl verwendet wird, glaube ich.

+0

Danke für den nützlichen Link. Überraschend für mich, dass das eingebaute Diff nicht machen kann, was ich will. Es scheint mir, dass ich gegen das Unix-Prinzip verstoße, die geringste Ausgabe zu verlangen. Die Verwendung der -x -u Befehle gibt mir die gleichen Ergebnisse wie nicht. 'svn help diff' sag mir, dass das die Standardwerte sind. Vielleicht müssen Sie den zusätzlichen Char doch nicht eingeben? – DaveBurns

3

Sie könnten die Ergebnisse von 'svn diff' zu grep pipen und einen regulären Ausdruck schreiben, um zu bekommen, was Sie wollen. Zum Beispiel, versuchen Sie dies:

svn diff | grep "^[+-\]" 

Der obige Befehl bekommt man alle Zeilen, die mit einem ‚+‘ oder beginnen ‚-‘ oder einem ‚\‘. (Sie brauchen das '\', wenn Sie Unterschiede wie "\ Keine neue Zeile am Ende der Datei" sehen möchten.)

+0

Das funktioniert gut, wenn Sie nur die geänderten Zeilen möchten. Es gibt jedoch keine korrekten Informationen über Zeilennummern aus. Z.B. mit 3 Zeilen Kontext vorher/nachher, "@@ -21,7 +21,7 @@" sagt Zeile 24 wurde geändert. Ohne Kontext würden Sie sehen "@@ -24,1 +24,1 @@" – kamczak

4

Der Vorschlag oben noch das Kontextformat produziert, aber mit 0 Zeilen Kontext. Dies ist immer noch nicht die traditionelle Diff-Ausgabe vor der Subversion.

Was funktioniert für mich ist: svn di --diff-cmd=diff -x --normal

Die --normal Option (in der diff, dass Schiffe mit OSX) gibt das traditionelle Format, das einige Leute bevorzugen.

Verwandte Themen