Supprimer automatiquement à la Subversion de fichiers non versionnés
Quelqu'un sait d'une façon récursive de supprimer tous les fichiers dans une copie de travail qui ne sont pas sous contrôle de version? (J'ai besoin de cela pour obtenir des résultats plus fiables dans ma construction automatique de VMware.)
- Je suis un utilisateur SVN et ont été comparant Git SVN pour voir si je veux peut-être envie de faire la transition. il semble que cela peut être un autre exemple où Git brille avec ses "git propre de la commande".
- Ou
hg purge --all
dans l'Mercurial. - Double de stackoverflow.com/questions/2803823/... où il y a beaucoup plus d'activité utile.
Vous devez vous connecter pour publier un commentaire.
Edit:
Subversion 1.9.0 introduit une option pour ce faire:
Avant cela, j'utilise ce script python pour le faire:
Il semble faire le travail assez bien.
svn cleanup --remove-unversioned
est mieux. Et c'est pour Subversion 1.9.0 (cette version est à partir de 2015). Il est stable et standar.cela fonctionne pour moi en bash:
Seth Renos'est mieux:
Il gère les dossiers non versionnés et les espaces dans les noms de fichiers
Que par les commentaires ci-dessous, cela ne fonctionne que sur les fichiers subversion ne connaissent pas (statut=?). Rien que la subversion ne connaître (y compris Ignoré les fichiers/dossiers) ne seront pas supprimés.
Si vous utilisez subversion 1.9 ou plus, vous pouvez simplement utiliser la svn cleanup de commande avec l'option --remove-sans version et --remove-ignoré options
svn status | grep "^?" | awk '{print $2}' | xargs -d \\n rm -r
svn status | grep "^\?" | cut -c9- | tr '\n' '\0' | xargs -0 rm
sed s=\\=/=g
avant laxargs
la partie à traiter avec les Unix-Windows séparateur de chemin de différence.Je suis tombé sur cette page en cherchant à faire la même chose, mais pas pour une génération automatisée.
Après un peu plus de recherche, j'ai découvert le "Menu Contextuel Étendu " dans TortoiseSVN. Maintenez la touche maj enfoncée et faites un clic droit sur la copie de travail. Il y a maintenant des options supplémentaires sous le menu TortoiseSVN, y compris " Supprimer les éléments non versionnés...'.
Mais peut-être pas applicable pour cette question en particulier (c'est à dire dans le contexte d'un système automatisé de construire), j'ai pensé qu'il pourrait être utile pour d'autres personnes qui cherchent à faire la même chose.
Voir: svn-propre
Si vous êtes sur la ligne de commande de windows,
Version améliorée:
Si vous l'utiliser dans un fichier de commandes, vous devez double-la
%
:J'ai ajouté à mon profil windows powershell
--no-ignore
àsvn status
et-Recurse
àRemove-Item
Ligne de commande Linux:
Ou, si certains de vos fichiers sont la propriété de root:
Ceci est basé sur Ken de réponse. (Ken réponse saute les fichiers ignorés; ma réponse supprime).
Pouvez-vous pas juste faire une exportation vers un nouvel emplacement et de construire à partir de là?
Juste le faire sur unix-shell avec:
Si vous avez TortoiseSVN sur votre chemin et vous êtes dans le bon répertoire:
Les options sont décrites dans la TortoiseSVN de l'aide pour
/command:cleanup
:Mon C# conversion de Thomas Watnedals script Python:
C'est un shell unix commande pour supprimer tous les fichiers qui ne sont pas sous le contrôle de subversion.
Notes:
st
danssvn st
est une accumulation dans alias pourstatus
, c'est à dire la commande est équivalente àsvn status
--no-ignore
comprend également des non-dépôt de la sortie de l'état, autrement ignore par le biais de mécanismes comme.cvsignore
etc. - puisque le but est d'avoir un propre point de départ pour les versions de ce commutateur est un mustgrep
filtres la sortie de ce que seuls les fichiers inconnu de la subversion sont de gauche les lignes commençant par?
liste des fichiers inconnu de subversion qui serait ignorer sans le--no-ignore
optionsed
xargs
de commande est chargé via-r
de ne pas exécuterrm
, si l'argument de la liste serait vide-d '\n'
option indiquexargs
d'utiliser un retour à la ligne comme séparateur tel que la commande fonctionne également pour les noms de fichiers avec des espacesrm -r
est utilisée dans le cas complète des répertoires (qui ne font pas partie du référentiel) doivent être enlevésSi vous utilisez tortoise svn se cache une commande pour le faire. Maintenez la touche maj enfoncée tout en cliquant-droit sur un dossier pour lancer le menu contextuel dans l'explorateur windows. Vous obtiendrez un "Supprimer les Éléments non versionnés de la commande".
voir le bas de cette page pour plus de détails, ou la capture d'écran ci-dessous qui met en évidence les fonctionnalités étendues avec les étoiles vertes, et l'un des intérêts avec le rectangle jaune...
Subversion 1.9.0 a introduit l'option pour supprimer les éléments non versionnés [1]
[1] https://subversion.apache.org/docs/release-notes/1.9.html#svn-cleanup-options
Je ne pouvais pas obtenir tout ce qui précède à travailler sans dépendances supplémentaires, je ne voulais pas avoir à ajouter à mon système automatisé de construction sur win32. J'ai donc monté les suivantes Ant commandes - note ces exiger de l'Ant-contrib POT à être installé (j'ai été en utilisant la version 1.0b3, plus tard, avec Ant 1.7.0).
Remarque cette opération supprime tous les fichiers non versionnés sans avertissement.
Pour un dossier différent, changer la
${basedir}
de référence.suppression de l'écho si sûr de ce que vous voulez faire.
/bin/sh
et nrm
processus lancés.Puisque tout le monde le fait...
Pourrait ainsi contribuer à une autre option
L' /(config|.ini)/est pour mes propres fins.
Et pourrait être une bonne idée d'ajouter l'option --no-ignorer pour la commande svn
Je suis tombé sur le svn-clean sur mon RH5 de la machine. Il est situé dans /usr/bin/svn-propre
http://svn.apache.org/repos/asf/subversion/trunk/contrib/client-side/svn-clean
Pur windows cmd/bat solution:
J'ai essayé Seth Reno version de cette réponse mais ça n'a pas fonctionné pour moi. J'ai eu 8 caractères avant le nom de fichier, et non pas 9 utilisé dans
cut -c9-
.Donc, c'est ma version avec
sed
au lieu decut
:Si vous êtes cool avec powershell:
De prendre de l'-WhatIf drapeau à faire la commande pour exécuter l'supprime. Sinon, il sera juste sortie de ce qu'il serait faire s'exécuter sans l'-WhatIf.
Je voudrais ajouter un commentaire à Thomas Watnedal réponse , mais ne peut pas encore.
Un problème mineur avec elle (ce qui n'affectera pas Windows), c'est qu'il ne vérifie que les fichiers ou les répertoires. Pour les systèmes Unix où les liens symboliques peuvent être présents, il est nécessaire de modifier la ligne:
à
également de supprimer les liens.
Pour moi, modification de la dernière ligne
if match: removeall(match.group(1))
ende sorte qu'il affiche bien ce que c'est la suppression a été utile aussi.
Selon le cas d'utilisation, les
?[\?ID]
partie de l'expression régulière peut être mieux comme?[\?I]
, comme leD
supprime également les fichiers supprimés, qui étaient sous contrôle de version. Je veux l'utiliser pour construire dans un endroit propre, vérifié dans le dossier, il n'y a pas de fichiers dans unD
état.@zhoufei j'ai testé votre réponse et voici la version mise à jour:
%
marques devant G et H%~1
peut être utilisé de n'importe quel nom de répertoire, j'ai utilisé cela comme une fonction dans un fichier bat, donc%~1
est d'abord entrée paramètreSi vous ne voulez pas écrire n'importe quel code, svn2.exe de svn2svn de cela, il y a également un article sur la façon dont il est mis en œuvre. Supprimé les dossiers et les fichiers sont placés dans la corbeille.
Exécuter "svn2.exe sync [chemin]".
Pour les gens qui aiment faire cela avec perl au lieu de python, shell Unix, java, etc. Par la présente, un petit script perl qui ne le foc ainsi.
Remarque: Cela supprime également tous les sans version répertoires
En utilisant TortoiseSVN: * cliquez-droit sur la copie de travail du dossier, tout en maintenant la touche shift enfoncée * choisissez "supprimer les éléments non versionnés"
Comment puis-je supprimer tous les sans version/ignorés des fichiers/dossiers dans ma copie de travail?
Propre façon de le faire en PERL serait:
J'ai utilisé environ 3 heures pour le générer. Il permettrait de prendre 5 minutes pour le faire en Unix.
Le réseau question étaient les suivants: les espaces dans les noms de Gagner des dossiers, de l'impossibilité de modifier les %%i et le problème avec la définition de vars en Gagner cmd boucle.
De code C# snipet ci-dessus n'a pas de travail pour moi - j'ai tortoise svn client, et les lignes sont mis en forme de façon légèrement différente. Voici le même code snipet comme ci-dessus, seulement réécrit à la fonction et à l'aide de regex.
Pour les Personnes sous windows qui veut éviter l'utilisation de tout outil, sauf le standart des commandes MS-Dos ici une solution :
FOR /F "tokens=1* delims=" %G DANS ('svn st ^| findstr "^?"') N'rd /s /q "%H"
FOR /F "tokens=1* delims=" %G DANS ('svn st ^| findstr "^?"') NE del /s /f /q "%H"
De cette façon, nous sommes exctracting le fichier/dossier à partir du svn st sortie de la commande.
J'ai aussi trouvé et utilisé les méthodes suivantes:
svn status --no-ignorer| awk '/^?/{print $2}'| xargs rm