web-dev-qa-db-fra.com

Comment supprimer des fichiers non suivis dans SVN

Comment puis-je supprimer tous les fichiers non suivis d'une extraction SVN avec l'outil de ligne de commande svn? Git et Hg proposent des commandes clean et purge à cet effet, mais je ne trouve pas la commande correspondante dans SVN.

Je ne me soucie pas si je dois annuler toutes mes modifications locales dans le processus (auquel cas je voudrais essentiellement restaurer ma caisse à un état vierge) ou si les modifications locales aux fichiers suivis peuvent rester intactes; l'une ou l'autre situation est acceptable.

46
Kerrek SB

Il peut y avoir un moyen intégré, mais si c'est le cas, je ne le sais pas. Cependant, quelque chose comme ce qui suit devrait faire le travail:

svn st | grep '^?' | awk '{print $2}' | xargs rm -rf

(Tous les fichiers non versionnés doivent apparaître sur une ligne commençant par ? dans un svn st.)

EDIT ( @ GearoidMurphy ) Il est difficile de faire fonctionner cet extrait de code dans un environnement cygwin, car xargs traite les barres obliques du chemin Windows comme séquences d'échappement et a du mal à analyser les fins de ligne '\ r\n', voici ma solution adaptée de cette réponse parfaitement valide:

svn st | grep '^?' | gawk '{printf(\"%s|\", $2)}' | xargs -d "|" -n1 C:\cygwin\bin\rm -r
63

Depuis la version 1.9, vous pouvez utiliser les éléments suivants:

svn cleanup . --remove-unversioned

Voir https://Subversion.Apache.org/docs/release-notes/1.9.html#svn-cleanup-options

21
Julio

Le script svn-clean fait exactement cela, bien qu'il repose sur l'installation de Perl. Il laissera les modifications locales intactes mais supprimera les fichiers ignorés. Exécutez avec '-p' pour prévisualiser les fichiers qui seront supprimés.

20
the_mandrill

Cette commande devrait faire le travail, les espaces et tout (essayé sur OSX uniquement):

svn status | grep '^\?' | sed 's/? *//' | xargs -I%  rm -fr %
4
Rodrigo Lopez