Gibt es einen Metadaten Ausschlussfilter für den SVN DIFF Befehl?
-
03-07-2019 - |
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 ...
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.
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.