Wie kann ich alle meine Änderungen in meinem SVN-Arbeitsverzeichnis entfernen?


195

Ich habe ein SVN-Arbeitsverzeichnis. Ich habe einige Änderungen in diesem Verzeichnis vorgenommen, und es wird in angezeigt svn status. Aber gibt es eine Möglichkeit für mich, alle meine Änderungen dort zu entfernen und alles über die Befehlszeile aus dem Trunk zu holen?

Antworten:


274
svn revert -R .
svn up

Dadurch wird das aktuelle Verzeichnis und alles darunter rekursiv zurückgesetzt und dann auf die neueste Version aktualisiert.


2
Beachten Sie, dass dies bei externen Geräten nicht funktioniert (sie werden anscheinend ignoriert).
Cic

86

Ich habe eine Kombination der Antworten anderer Leute verwendet, um diese Lösung zu finden:

Normale lokale SVN-Änderungen rückgängig machen

svn revert -R .

Entfernen Sie alle anderen Änderungen und unterstützen Sie das Entfernen von Dateien / Ordnern mit Leerzeichen usw.

svn status --no-ignore | grep -E '(^\?)|(^\I)' | sed -e 's/^. *//' | sed -e 's/\(.*\)/"\1"/' | xargs rm -rf

Vergessen Sie nicht, die neuesten Dateien von SVN zu erhalten

svn update --force

Vielen Dank Shaize, dies ist die eleganteste Sed, ... Pfeife, die ich bisher dafür gesehen habe :) Besonders auf die Ignoranten achten.
Mobbing

Klappt wunderbar. Vielen Dank!
Niilo Keinänen

28
svn revert -R .
svn cleanup . --remove-unversioned

Es werden keine * .class-Dateien usw. entfernt.
Trismegistos

2
Wenn Sie auch ignorierte Dateien entfernen möchtensvn cleanup . --remove-ignored
Kip

14

Wenn Sie keine Änderungen haben, können Sie immer sehr gründlich und / oder faul sein und ...

rm -rf *
svn update

Aber nein, tun Sie das nicht , es sei denn, Sie sind sich wirklich sicher, dass die Option "Nuke-from-Space" genau das ist, was Sie wollen! Dies hat den Vorteil, dass auch alle Build-Cruft, temporären Dateien und Dinge, die SVN ignoriert, zerstört werden.

Die korrektere Lösung besteht darin, den Befehl revert zu verwenden:

svn revert -R .

Das -R bewirkt, dass die Subversion alles im und unter dem aktuellen Arbeitsverzeichnis wiederholt und zurücksetzt.


Ich habe diesen Trick oft verwendet, aber mit SVN 1.7, wo Metadaten nur im WC-Stamm gespeichert sind, ist dies nicht mehr die saubere Lösung, die es war. Beispielsweise bleiben gelöschte Dateien gelöscht.
Bart van Heukelom

8
svn nuke-from-space
Jason Swett

9

Keine der Antworten hier war genau das, was ich wollte. Folgendes habe ich mir ausgedacht:

# Recursively revert any locally-changed files
svn revert -R .

# Delete any other files in the sandbox (including ignored files),
# being careful to handle files with spaces in the name
svn status --no-ignore | grep '^\?' | \
    perl -ne 'print "$1\n" if $_ =~ /^\S+\s+(.*)$/' | \
    tr '\n' '\0' | xargs -0 rm -rf

Getestet unter Linux; mag in Cygwin funktionieren, basiert aber (glaube ich) auf einer GNU-spezifischen Erweiterung, die es xargs ermöglicht, basierend auf '\0'anstelle von Leerzeichen zu teilen .

Der Vorteil des obigen Befehls besteht darin, dass zum Zurücksetzen der Sandbox keine Netzwerkaktivität erforderlich ist. Sie bekommen genau das, was Sie vorher hatten, und Sie verlieren alle Ihre Änderungen . (Haftungsausschluss, bevor mich jemand beschuldigt, dass dieser Code seine Arbeit zerstört) ;-)

Ich verwende dieses Skript auf einem kontinuierlichen Integrationssystem, auf dem ich sicherstellen möchte, dass nach einigen Tests ein sauberer Build ausgeführt wird.

Bearbeiten : Ich bin nicht sicher, ob dies mit allen Versionen von Subversion funktioniert. Es ist nicht klar, ob der svn statusBefehl immer konsistent formatiert ist. Die Verwendung erfolgt auf eigenes Risiko, wie bei jedem Befehl, der einen solchen Pauschalbefehl verwendet rm.


7

svn revert macht alle lokalen Änderungen rückgängig, die Sie vorgenommen haben


5

Mit dem folgenden Befehl können Sie alle lokalen Änderungen rückgängig machen:

svn st -q | awk '{print $2;}' | xargs svn revert

Ich erhalte die Fehlermeldung "Nicht genügend Argumente" für svn revert
Rundschreiben

4
svn status | grep '^M' | sed -e 's/^.//' | xargs rm

svn update

Entfernt alle geänderten Dateien. Ich erinnere mich an Probleme beim Zurücksetzen, wenn möglicherweise Dateien und Verzeichnisse hinzugefügt wurden.



0

Wenn Sie sich in Windows befinden, werden mit der folgenden for-Schleife alle nicht festgeschriebenen Änderungen an Ihrem Arbeitsbereich zurückgesetzt:

for /F "tokens=1,*" %%d in ('svn st') do (
  svn revert "%%e"
)

Wenn Sie alle nicht festgeschriebenen Änderungen und alle nicht versionierten Objekte entfernen möchten, sind zwei Schleifen erforderlich:

for /F "tokens=1,*" %%d in ('svn st') do (
  svn revert "%%e"
)
for /F "tokens=1,*" %%d in ('svn st') do (
  svn rm --force "%%e"
)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.