2012-06-20 3 views
5

Ich möchte Meld verwenden, um den Unterschied zwischen Revisionen anzuzeigen. Ich installierte meld und dann im Projektverzeichnis ausgeführt:Kann nicht svn diff mit Meldung

svn diff -r 2165:2182 --diff-cmd meld 

aber es thows die folgenden Fehler auf:

Index: app/models/college_friends_count.rb 
=================================================================== 
svn: E200012: Process 'meld' failed (exitwhy 2) 

Kann mir jemand sagen, was falsch ist hier los?

+0

Versuchen meld auf zwei beliebige Dateien ausgeführt werden. Funktioniert es? –

+1

yeah ... es funktioniert ... auch wenn ich Inhalte in einigen Dateien ohne commit ändere, zeigt meld diese Unterschiede durch Ausführen von "Meld.". Aber der Vergleich verschiedener Revisionen funktioniert nicht –

+0

SVN übergibt nicht nur an das Diff-Tool 2 Pfade zu vergleichen, sondern auch andere Optionen wie Beschriftungen (Sie können alle Optionen sehen, indem Sie an --cmd ein Skript übergeben, das seine Befehlszeile ausgibt). Vielleicht akzeptiert meld diese zusätzlichen Optionen nicht. Ich weiß wenig über eine Verschmelzung, nur eine Idee. –

Antwort

5

Ich glaube E200012 bedeutet, dass der zugrunde liegende Prozess (Meld) mit einem Exit-Code ungleich Null beendet wird. Viele Diff-Tools zeigen das Ergebnis der Diff-Operation an (0 = kein Unterschied 1 = Unterschiede usw.).

Obwohl meine Version von Meld nicht scheint, nicht-Null-Exit-Codes zu verwenden, weiß ich, dass colordiff, SVN während eines Verzeichnis-Crawling "svn diff" wie in Ihrem Beispiel oben anhält. Probieren Sie es in einer Datei aus, die keine Änderungen zum Testen enthält.

Eine gute Lösung ist, Ihren eigenen diff Befehl zu machen, sagen wir, Sie nennen es meld_svn:

#!/bin/bash 
meld "$6" "$7" 
exit 0 

Also, was wir tun, ist Codes Ausgang des meld zu ignorieren, und Aussteigen mit unseren eigenen (die gewonnen Stop SVN). Die Anführungszeichen um die Argumente bedeuten, dass Dateinamen mit Leerzeichen das Skript nicht beschädigen.

Machen Sie es ausführbar, dann bearbeiten Sie Ihre ~ /. Subversion/Config und setzen Sie die Diff-cmd auf "Meld_svn". Das funktioniert gut für colordiff, sollte dein Problem mit meld beheben, wenn meld tatsächlich mit Nicht-Null-exit-codes beendet wird.

Ich hoffe, dass hilft.

4

Für mich bestand das Problem darin, dass standardmäßig svn -u als Option an den externen diff-Befehl übergibt, und meld erwartet das Flag nicht.

Die -x Flagge für svn-diff können Ihnen diesen Standard-Flag außer Kraft zu setzen:

svn diff -x \"\" --diff-cmd meld 

Dies ersetzt -u mit "" auf melds Kommandozeilen werden die Fluchten erforderlich, damit IhrDeterm Shell nicht die quote- nicht analysieren markiert die erste Runde und übergibt sie stattdessen an SVN, der sie an die Meld-Befehlszeile weitergibt.

(btw, mit echo als diff-cmd können Sie leicht prüfen, was SVN meld schicken würde)

+0

Siehe [diese Antwort] (http: // stackoverflow.com/a/7418087/420867) für einen anderen Ansatz, der es auch ermöglicht, dass meld Fusionen durchführt. – drevicko