J'ai un répertoire de travail SVN. J'ai fait quelques changements dans ce répertoire, et cela se voit dans svn status
. Mais y a-t-il un moyen pour que je supprime toutes mes modifications et que je récupère tout du coffre en utilisant la ligne de commande?
svn revert -R .
svn up
Cela retournera de manière récursive le répertoire en cours et tout ce qu'il contient, puis se mettra à jour à la dernière version.
J'ai utilisé une combinaison de réponses d'autres personnes pour trouver cette solution:
svn revert -R .
svn status --no-ignore | grep -E '(^\?)|(^\I)' | sed -e 's/^. *//' | sed -e 's/\(.*\)/"\1"/' | xargs rm -rf
svn update --force
svn revert -R .
svn cleanup . --remove-unversioned
Si vous n'avez aucun changement, vous pouvez toujours être très complet et/ou paresseux et faire ...
rm -rf *
svn update
Mais, non vraiment, faites pas faites-le à moins que vous ne soyez vraiment sûr que l'option nucléaire de l'espace est ce que vous voulez! Cela présente l’avantage de détruire également tous les fichiers de construction, fichiers temporaires et éléments ignorés par SVN.
La solution la plus correcte consiste à utiliser la commande revert:
svn revert -R .
Avec -R, Subversion récrémente et rétablit tout ce qui se trouve dans et sous le répertoire de travail actuel.
Aucune des réponses ici était tout à fait ce que je voulais. Voici ce que je suis venu avec:
# 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 (je crois) sur une extension spécifique à GNU qui permet à xargs de se scinder en fonction de '\0'
au lieu d'espaces.
L'avantage de la commande ci-dessus est qu'elle ne nécessite aucune activité réseau pour réinitialiser le bac à sable. Vous obtenez exactement ce que vous aviez auparavant et vous perdez toutes vos modifications. (avertissement avant que quelqu'un me reproche de ce code détruisant leur travail) ;-)
J'utilise ce script sur un système d'intégration continue où je veux m'assurer qu'une nouvelle génération 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. Ce n'est pas clair si le svn status
La commande est toujours formatée de manière cohérente. Utilisez-le à vos risques et périls, comme avec toute commande utilisant une telle commande globale rm
.
svn revert annulera les modifications locales que vous avez apportées
Vous pouvez utiliser la commande suivante pour annuler toutes les modifications locales:
svn st -q | awk '{print $2;}' | xargs svn revert
svn status | grep '^M' | sed -e 's/^.//' | xargs rm
svn update
Supprime tout fichier modifié. Je semble me souvenir d’avoir eu des problèmes avec la restauration lorsque des fichiers et des répertoires ont été ajoutés.
Si vous êtes sur 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"
)