Comment puis-je supprimer toutes mes modifications dans mon répertoire de travail SVN?

195

J'ai un répertoire de travail SVN. J'ai apporté quelques modifications dans ce répertoire, et cela apparaît svn status. Mais y a-t-il un moyen pour moi de supprimer toutes mes modifications et de tout récupérer du tronc en utilisant la ligne de commande?

n179911
la source

Réponses:

274
svn revert -R .
svn up

Cela rétablira récursivement le répertoire actuel et tout ce qu'il contient, puis mettra à jour vers la dernière version.

Mike McQuaid
la source
2
Notez que cela ne fonctionne pas avec les externes (ils sont apparemment ignorés).
cic
86

J'ai utilisé une combinaison de réponses d'autres personnes pour trouver cette solution:

Annuler les modifications SVN locales normales

svn revert -R .

Supprimez toute autre modification et prend en charge la suppression de fichiers / dossiers avec des espaces, etc.

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

N'oubliez pas d'obtenir les derniers fichiers de SVN

svn update --force
Shaize
la source
Merci beaucoup Shaize, c'est le sed le plus élégant, ... pipe que j'ai vu jusqu'ici pour ça :) Surtout en faisant attention aux ignores aussi.
bully
Fonctionne comme un charme. Merci!
Niilo Keinänen
28
svn revert -R .
svn cleanup . --remove-unversioned
lexa-b
la source
Il ne supprime pas les fichiers * .class etc.
Trismegistos
2
si vous souhaitez également supprimer les fichiers ignoréssvn cleanup . --remove-ignored
Kip
14

Si vous n'avez aucun changement, vous pouvez toujours être très minutieux et / ou paresseux et faire ...

rm -rf *
svn update

Mais non, ne faites pas ça à moins d'être vraiment sûr que l'option nuke-from-space est ce que vous voulez !! Cela a l'avantage de neutraliser également tous les fichiers de construction, les fichiers temporaires et les choses que SVN ignore.

La solution la plus correcte consiste à utiliser la commande revert:

svn revert -R .

Le -R fait que subversion récursive et rétablit tout dans et en dessous du répertoire de travail actuel.

bbum
la source
J'ai souvent utilisé cette astuce, mais avec SVN 1.7, où les métadonnées sont stockées uniquement dans la racine WC, ce n'est plus la solution propre qu'elle était. Par exemple, les fichiers supprimés restent supprimés.
Bart van Heukelom
8
svn nuke-from-space
Jason Swett
9

Aucune des réponses ici n'était tout à fait ce que je voulais. Voici ce que j'ai trouvé:

# 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

Testé sur Linux; peut fonctionner dans Cygwin, mais repose sur (je crois) une extension spécifique à GNU qui permet aux xargs de se diviser en fonction de la '\0'place de l'espace.

L'avantage de la commande ci-dessus est qu'elle ne nécessite aucune activité réseau pour réinitialiser le sandbox. Vous obtenez exactement ce que vous aviez auparavant et vous perdez tous vos changements . (avertissement avant que quelqu'un ne me reproche ce code qui détruit leur travail) ;-)

J'utilise ce script sur un système d'intégration continue où je veux m'assurer qu'une construction propre est effectuée après l'exécution de certains tests.

Edit : je ne suis pas sûr que cela fonctionne avec toutes les versions de Subversion. Il n'est pas clair si la svn statuscommande est toujours formatée de manière cohérente. Utilisez à vos risques et périls, comme avec toute commande qui utilise une telle rmcommande de couverture .

mpontillo
la source
7

svn revert annulera toutes les modifications locales que vous avez apportées

Sean
la source
5

Vous pouvez utiliser la commande suivante pour annuler toutes les modifications locales:

svn st -q | awk '{print $2;}' | xargs svn revert
NaN
la source
Je reçois le message d'erreur "Pas assez d'arguments" pour svn revert
circulaire
4
svn status | grep '^M' | sed -e 's/^.//' | xargs rm

svn update

Supprime tout fichier qui a été modifié. Je me souviens avoir eu du mal à revenir lorsque des fichiers et des répertoires peuvent avoir été ajoutés.

Juan
la source
0

Si vous êtes sous Windows, la boucle for suivante annulera toutes les modifications non validées apportées à votre espace de travail:

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

Si vous souhaitez supprimer toutes les modifications non validées et tous les objets non versionnés, il faudra 2 boucles:

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"
)
David
la source