Frage

Ich benutze SVN als Quellcodeverwaltungssystem, und ich frage mich, wie Verzeichnisse zu vergleichen, während alle Metadaten Unterschiede zu ignorieren. Gibt es eine Möglichkeit svn diff zu sagen, nur den tatsächlichen Inhalt und ignorieren alle Metadaten zu vergleichen?

Ich meine Metadaten wie SVN Eigenschaften usw., die nicht den Dateiinhalt beeinflussen. Angenommen, die Datei X hat eine zusätzliche Eigenschaft in Zweig B im Vergleich zu Stamm T. Leider wird es in ‚svn diff T B‘ zeigen, obwohl der tatsächlichen Inhalt der Datei X ist das gleiche.

Ich suche etwas wie folgt aus:

svn diff https://example.org/tags/v1 https://example.org/tags/v2 -x -ignore-metadata --summarize

Update: ich diese teilweise gelöst, indem direkt auf dem Dateisystem diff'ing stattdessen die SVN-Tools zu verwenden. Im folgenden sehen Sie meine eigene Antwort ...

War es hilfreich?

Lösung 5

Es scheint keinen Weg, dies mit den SVN integrierten Tools zu erledigen. Wie ich es gelöst: Exportieren Sie beide Bäume und diff sie diretly auf dem Dateisystem Ihr bevorzugtes diff-Tool. Das ist irgendwie der einzige Weg, um dies getan: /

Andere Tipps

Sie können die svn diff Ausgabe über ‚filterdiff --clean‘ passieren alle überflüssigen Linien einschließlich Eigenschaftsänderungen zu entfernen.

Wenn Sie die --summarize Option verwenden, dann Eigenschaftsänderungen in den zweiten angegeben werden, statt die erste Spalte.

d.h.

M  URL  -- indicates content change
 M URL  -- property change
MM URL  -- content and property change

Es ist ein bisschen leichter zu grep. Ich denke, man könnte einen zweistufigen Prozess, wenn Sie eine vollständige diff wollen - erster Einsatz zusammenfassen Dateien mit Inhaltsänderung zu finden, die sie dann diff

.

Nizza Spitze von JosephWatkins.

Hier ist der Befehl für die grep-junior-Nutzer:

svn diff A B --summarize | grep '^. '

Der grep sucht einen Raum als das zweite Zeichen auf der Linie.

Sie haben diese während der Suche durch die SVN-Hilfe-Dokumente

svn diff --patch-compatible

Es ist das gleiche wie läuft

svn diff --show-copies-as-adds --ignore-properties

Hier ist ein einzelner Befehl, der all dies tut. Angenommen, Sie mögen alle (nicht-Eigenschaft) finden diffs für alle Dateien im aktuellen Verzeichnis zwischen Revision 54833 und 57215. Dieser Befehl sollte es tun:

svn diff -r 54833:57215 --summarize | egrep -v '^ |^D|^A' | awk '{ print $2 }' | xargs svn diff -r 54833:57215

. NB: Es ist nur diffs modifizierte Dateien - nicht hinzugefügt oder gelöscht Dateien

Verwenden Sie svn diff --ignore-properties . Das ist Subversion integrierte Methode nur differenzier des Inhalts zu tun. Es ignoriert alle Änderungen an den Eigenschaften der Elemente.

ich ein Drehbuch geschrieben, dies zu tun, nachdem ich nicht ein Online finden kann.

Das Skript entfernt die Daten basierend auf einer Reihe von regulären Ausdrücken am Anfang des Skripts eingegeben. Derzeit ist es eingerichtet, um die Eigenschaften Änderungen herauszufiltern, aber es kann jede Änderung entfernen, die eine Reihe von regulären Ausdrücken entsprechen.

Nur die Ausgabe des svn diff an das Skript, nachdem Sie das Skript festgelegt. Ich habe die Filter im Skript anstelle von Parametern, weil ich immer die gleichen Filter ausgeführt werden.

ich es dann als GPLv2.

clean_svn_diff.bash

Ich bin mir nicht sicher, aber ein einfaches ‚svn diff | grep -IV „Zeug zu ignorieren“‘wäre eine Abhilfe.

Sie können das svn: Eigenschaft auf Dateien ignorieren und Verzeichnisse, die Sie wollen sVN ignorieren diff.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top