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?

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.


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

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

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.


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 .


7

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


5

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

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

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.



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"
)
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.