2010-09-16 5 views
7

J'ai supprimé de nombreux fichiers de ma copie locale qui étaient présents dans différents sous-répertoires du répertoire principal. Je veux également supprimer tous les fichiers supprimés localement de mon dépôt SVN.svn script pour valider un ensemble de fichiers supprimés

Si je vérifie le statut SVN de mon répertoire principal en utilisant svn st main_dir alors tous les fichiers supprimés sont affichés avec '!' symbole qui signifie que les fichiers correspondants sont manquants. Mais ces fichiers ne sont pas supprimés de mon référentiel SVN même si je valide mes modifications en utilisant svn ci main_dir.

Existe-t-il un moyen, une commande ou un script pour supprimer tous les fichiers supprimés localement de mon répertoire principal et de mes sous-répertoires à partir de mon référentiel SVN? Je pense que nous pouvons parcourir tous les fichiers de chaque dossier et supprimer les fichiers supprimés localement de SVN en vérifiant le fichier correspondant SVN STATUS ('!'), Mais je ne sais pas comment convertir mon idée en script.

Quelqu'un peut-il m'aider s'il vous plaît à terminer cette tâche? Merci à l'avance ...

Siva

+0

Voir ma réponse sur une question que c'est essentiellement une dupe d'ici: http://stackoverflow.com/questions/1308136/svn-set-all-files-marked-with-to-d/1308147#1308147 – jason

Répondre

17

for i in $(svn st | grep \! | awk '{print $2}'); do svn delete $i; done

+0

Merci beaucoup Gadolin, cela fonctionne parfaitement. Je suis très nouveau à ce script, pouvez-vous s'il vous plaît expliquer cette déclaration un peu afin que je puisse comprendre correctement. – Siva

+0

1. svn st <- svn status – Gadolin

+1

1. grep ne prend que les lignes de l'état svn qui commence par!, Donc celles-ci vous intéressent, alors que la sortie svn status a deux colonnes, awk prend la seconde colonne (où est le nom du fichier) , alors chaque fichier est pris comme une entrée dans la boucle pour 'i'. Dans la boucle interne, j'appelle svn delete $ i, où $ i est substitué par le fichier. – Gadolin

0

Vous devriez avoir utilisé svn delete PATH pour supprimer ces fichiers. De cette façon, ils sont supprimés à la fois de votre système de fichiers et de la copie de travail. Pour plus de détails, voir svn delete pour plus de détails.

Je vous suggère svn update de récupérer les fichiers du dépôt distant et de les supprimer en utilisant svn delete.

+0

Je n'ai pas supprimé ces fichiers manuellement, en fait lors de la mise à niveau de l'une de mes bibliothèques tierces certains des anciens fichiers ont été supprimés de l'ancienne version de cette bibliothèque. Donc, j'ai juste besoin de supprimer ces fichiers de mon dépôt SVN aussi. – Siva

+0

Cela vous obligerait à supprimer les fichiers uniquement en utilisant svn delete , ce qui est très fastidieux et parfois impossible du tout (par exemple, lorsque vous synchronisez la copie de travail avec une autre version de projet). – mvmn

1
for i in $(svn st | grep \! | awk '{print $2}'); do svn delete $i'@'; done 

Pour les fichiers avec @ 2x en eux.

+0

vous êtes mon sauveur! : D C'est si sacrément difficile à chercher dans Google ou SO à "svn delete @ 2x" et obtenir la bonne réponse! Merci encore! –

+0

Pas de problème du tout. :) –

3

Je trouve xargs plus facile que la boucle:

svn stat | grep \\! | awk '{print $2}' | xargs svn remove 
+0

Il y aura une erreur si aucun fichier n'a été trouvé. – goofansu

0

Fonctionne également avec un espace blanc dans les noms de fichiers:

svn st | grep ! | sed 's/!\s*//' | xargs -I{} svn remove '{}' 
Questions connexes