Wie kann man sehen, was aus dem Repository aktualisiert wird, bevor der Befehl "svn update" ausgegeben wird?

115

Ich habe Änderungen in zahlreichen Dateien von Eclipse in ein SVN-Repository übernommen.

Ich gehe dann zum Website-Verzeichnis auf der Linux-Box, wo ich diese Änderungen vom Repository in das dortige Verzeichnis aktualisieren möchte.

Ich möchte "svn update project100" sagen, wodurch die Verzeichnisse unter "project100" mit all meinen hinzugefügten und geänderten Dateien usw. aktualisiert werden.

Ich möchte jedoch nicht unbedingt Änderungen aktualisieren, die ich nicht vorgenommen habe. Also dachte ich, ich könnte "svn status project100" sagen, aber wenn ich das mache, bekomme ich eine völlig andere Liste von Änderungen, die vorgenommen werden, keine von meinen ist in der Liste, was seltsam ist.

Um sicherzugehen, dass nur meine Änderungen im Webverzeichnis aktualisiert werden, muss ich zu jedem Verzeichnis navigieren, in dem ich weiß, dass eine Änderung vorgenommen wurde, und nur diese Dateien explizit aktualisieren, z. B. "svn update newfile1.php" usw. das ist langweilig.

Kann hier jemand Licht in die Standardarbeitsanweisung bringen, nämlich wie erhalte ich eine genaue Liste aller Änderungen, die vorgenommen werden sollen, bevor ich den Befehl "svn update" ausführe? Ich dachte, es wäre der Befehl "status".

Edward Tanguay
quelle

Antworten:

167

Versuchen:

svn status --show-updates

oder (gleich aber kürzer):

svn status -u
Dave Webb
quelle
9
oder kürzer: svn st -u
Kenyakorn Ketsombut
Was bedeuten die X in der Ausgabe?
IgorGanapolsky
1
Verwenden Sie außerdem: svn status -q -u... Zeigt nur Aktualisierungsänderungen und lokale Änderungen an, die sich auf Dateien beziehen, die zum Repository gehören. Sie erhalten keine Fragezeichen (?) Von Nicht-Repository-Dateien.
wird
56

Je nachdem, was Sie zwischen Ihrer Arbeitskopie und dem neuesten SVN-Server-Repository wissen möchten, ohne Ihre lokale Arbeitskopie zu aktualisieren, können Sie Folgendes tun:

Wenn Sie wissen möchten, was im SVN-Server-Repository geändert wurde, führen Sie den folgenden Befehl aus:

$ svn st -u

Wenn Sie wissen möchten, ob dieselbe Datei sowohl in Ihrer lokalen Arbeitskopie als auch im SVN-Server-Repository geändert wurde, führen Sie den folgenden Befehl aus:

$ svn st -u | grep -E '^M {7}\*'

Wenn Sie eine Liste der Dateien erhalten möchten, die zwischen einer bestimmten Revision und HEAD geändert wurden, führen Sie den folgenden Befehl aus:

$ svn diff -r revisionNumber:HEAD --summarize

Wenn Sie eine Liste der Dateien erhalten möchten, die zwischen bestimmten Revisionen geändert wurden, führen Sie den folgenden Befehl aus:

$ svn diff -r revisionNumber:anotherRevisionNumber --summarize

Wenn Sie sehen möchten, was aktualisiert wird (ohne tatsächlich zu aktualisieren), führen Sie den folgenden Befehl aus:

$ svn merge --dry-run -r BASE:HEAD .

Wenn Sie wissen möchten, welcher Inhalt einer bestimmten Datei im SVN-Server-Repository im Vergleich zu Ihrer Arbeitskopie geändert wurde, führen Sie den folgenden Befehl aus:

$ svn diff -r BASE:HEAD ./pathToYour/file

Wenn Sie wissen möchten, welcher Inhalt aller Dateien im SVN-Server-Repository im Vergleich zu Ihrer Arbeitskopie geändert wurde, führen Sie den folgenden Befehl aus:

$ svn diff -r BASE:HEAD .
TianCaiBenBen
quelle
43

Sie können sehen, was aktualisiert wird (ohne tatsächlich zu aktualisieren), indem Sie Folgendes ausgeben:

svn merge --dry-run -r BASE:HEAD .

Weitere Details hier .

Ben Hoffstein
quelle
Oben hat bei mir nicht funktioniert, musste rennensvn merge --dry-run --revision BASE:HEAD .
Znarkus
3
Abrufen von "svn: E195020: Kann nicht in Arbeitskopie mit gemischter Revision zusammengeführt werden [16032: 16061]; versuchen Sie zuerst zu aktualisieren"
Hubert Grzeskowiak
Tolle Antwort - schade, dass es bei gemischten Überarbeitungskopien nicht funktioniert. Das werde ich lernen
Gerard ONeill
2
@ HubertGrzeskowiak - Ich liebe die Ironie q: how do I ... without doing an update?a: first, do an update, then ...:) :) :)
Jesse Chisholm
17

Das habe ich gesucht. svn helpIch habe zuerst Google überprüft, bin aber für mich durchgekommen :)

svn diff -r BASE:HEAD .
Jeff
quelle
14

Das gleiche aber kürzer kürzer :):

svn st -u
Kenzo
quelle
0

Sie können 'svn diff' verwenden, um den Unterschied zwischen Ihrer Arbeitskopie und dem Repository festzustellen.

Andrew
quelle
9
Falsch. Diese würden nur die Unterschiede zwischen Ihnen und der letzten Synchronisierung mit dem Repository auflisten. Sie werden keine Unterschiede feststellen, die andere Personen in der Zwischenzeit für das Repository festgelegt haben. Die OP will wissen , was diese Änderungen sind, ohne dass sie über eine Anwendungsvn update
Dland
@ Andrew wollte vorschlagen, dass das OP 'svn diff -r HEAD URL' ausführt, um den Unterschied zwischen den ausgecheckten Dateien und den als HEAD oder Top-Version im Repository eingecheckten Dateien zu sehen.
Mac
0

Theoretisch könnten Sie alle Ihre Änderungen in einem Zweig vornehmen, den Sie für Ihren eigenen Gebrauch erstellt haben. Sie wären sich dann ziemlich sicher, dass Sie der einzige sind, der sich dazu verpflichtet hat.

Die Entwicklung von IMHO-Funktionen sollte so erfolgen.

Dann könnten Sie diesen Zielcomputer von diesem Zweig anstatt vom Trunk aus aktualisieren.

Rory Becker
quelle