Si j'ai une copie de travail d'un référentiel Subversion, existe-t-il un moyen de supprimer tous les fichiers non versionnés ou ignorés de cette copie de travail avec une seule commande ou un seul outil? Essentiellement, je cherche l'analogue SVN à git clean
.
Une ligne de commande ou une solution graphique (pour TortoiseSVN) serait acceptable.
Utiliser TortoiseSVN:
svn status --no-ignore | grep '^[I?]' | cut -c 9- | while IFS= read -r f; do rm -rf "$f"; done
Cela a les caractéristiques suivantes:
--xml
option et analyser la sortie XML résultante)svn status
affiche les autres caractères d'état avant le nom du fichier (ce qui ne devrait pas être le cas, car les fichiers ne sont pas suivis, mais juste au cas où ...)J'utilise un script Shell nommé svnclean
qui contient les éléments suivants:
#!/bin/sh
# make sure this script exits with a non-zero return value if the
# current directory is not in a svn working directory
svn info >/dev/null || exit 1
svn status --no-ignore | grep '^[I?]' | cut -c 9- |
# setting IFS to the empty string ensures that any leading or
# trailing whitespace is not trimmed from the filename
while IFS= read -r f; do
# tell the user which file is being deleted. use printf
# instead of echo because different implementations of echo do
# different things if the arguments begin with hyphens or
# contain backslashes; the behavior of printf is consistent
printf '%s\n' "Deleting ${f}..."
# if rm -rf can't delete the file, something is wrong so bail
rm -rf "${f}" || exit 1
done
Je sais que c'est vieux, mais au cas où quelqu'un d'autre tomberait dessus, les nouvelles versions (1.9 ou ultérieures) de svn support --remove-unversioned
, par exemple. svn cleanup . --remove-unversioned
.
https://Subversion.Apache.org/docs/release-notes/1.9.html#svn-cleanup-options
Cet oneliner pourrait vous aider:
$ svn status | grep '^?' | awk '{print $2}' | xargs rm -rf
A utiliser avec précaution!
Modification des réponses de Yanal-Yves Fargialla et de gimpf à l’aide de Powershell (sans qu’il soit permis de commenter le message original de Stackoverflow):
powershell -Command "&{(svn status --no-ignore) -match '^[\?i]' -replace '^.\s+' | rm -recurse -force}
Cela ajoute le carat ("^") pour spécifier le début de la ligne, en évitant de faire correspondre tous les fichiers contenant la lettre "i". Ajoutez également les indicateurs pour -recurse et -force à rm afin de rendre cette commande non interactive et donc utilisable dans un script.
Beaucoup de choses dans SVN peuvent être faites de différentes manières, comme en témoignent les réponses variées en ligne de commande données ici. Avec l'avènement de la version 1.7, TortoiseSVN propose une autre technique offrant une résolution de grain plus fine que celle fournie par Stefan, vous permettant de sélectionner des fichiers non versionnés séparément des fichiers ignorés. Il suffit de sélectionner TortoiseSvn >> Clean up...
pour ouvrir cette boîte de dialogue.
Avec Powershell:
(svn status --no-ignore) -match '[?]' -replace '^.\s+' | rm
En ligne de commande:
powershell -Command "&{(svn status --no-ignore) -match '[?]' -replace '^.\s+' | rm}"
Cet outil fonctionne pour moi (d'après la réponse de Richard Hansen, qui étonnamment ne fonctionnait pas pour les fichiers contenant des espaces):
svn status --no-ignore | grep '^[I?]' | cut -c 9- | xargs -d"\n" -I{} rm {}
Utiliser TortoiseSVN:
Pas vraiment une solution agréable et propre, mais le moyen le plus rapide que je connaisse (sous Windows).
Merci à pkh pour la pointe avec les fichiers ignorés.
Quelqu'un a dit que vous ne pouvez pas le faire à partir de la ligne de commande Windows.
Taureau.
for /f "tokens=2 delims= " %I IN ('svn st --no-ignore ^| findstr /R "^[I?]"') DO (DEL /S /F /Q /A:H "%I" & rmdir /S /Q "%I")
Le fait en une ligne et ne nécessite pas un seul outil GNU outil. :)
Ceci est similaire aux autres réponses, mais obtient en fait des fichiers ignorés (notez le 'I' dans les RE):
rm -rf `svn status --no-ignore | grep '^[\?I]' | sed 's/^[\?I]//'`
vous ne pouvez pas les supprimer avec juste la ligne de commande SVN (vous n'êtes pas sûr des outils de l'interface graphique) si vous êtes sous le système Linux, ceci pourrait vous aider:
http://www.guyrutenberg.com/2008/01/18/delete-unversenced-files-under-svn/
L'autre méthode (brutale) consiste à valider les modifications, à tout supprimer du dossier et à effectuer une nouvelle extraction.