Dans SVN, y a-t-il une commande que je peux utiliser pour supprimer tous les fichiers localement manquants dans un répertoire?
Ou à défaut, une manière de ne lister que les fichiers qui manquent (ou, dans le cas plus général, ont le statut A, D,?, Etc.)
Réponses:
Si vous utilisez TortoiseSVN, effectuez simplement une vérification des modifications , triez par la colonne État , sélectionnez toutes les entrées marquées
missing
, cliquez avec le bouton droit pour ouvrir le menu contextuel et sélectionnez Supprimer . Enfin, engagez-vous à publier les modifications dans le référentiel.Si vous êtes sous Windows, mais que vous préférez la ligne de commande et que vous aimez utiliser PowerShell, ce one-liner fera l'affaire:
Autrement dit, filtrez la sortie uniquement sur les lignes affichant les fichiers manquants (signalées par une exclamation au début de la ligne), capturez le nom de fichier associé et effectuez un
svn rm
sur ce nom de fichier.(Article de blog Supprimer tous les fichiers «manquants» d'une copie de travail SVN fait quelque chose de similaire pour Unix / Linux.)
la source
svn up
? car les fichiers sont restaurés à partir du serveur svnSi vous utilisez Mac ( Darwin ) ou Linux, vous pouvez diriger les sorties des commandes suivantes vers
svn rm
tous les fichiers manquants. Vous pouvez définir le répertoire de travail actuel sur le répertoire ou le sous-répertoire approprié avant de les exécuter, selon que vous souhaitez exécuter cette copie de travail entière ou seulement un sous-ensemble.svn rm
utilisant la sortie de # 3 comme argumentsLa commande complète est donc:
Références:
la source
awk '{print " --force "$2"@"}'
si votre nom de fichier contient un@
(si vous êtes un développeur iOS par exemple)awk '{$1=""; print " --force \""substr($0,2)"@\"" }'
devrait faire l'affaire (et commence à avoir l'air moche)--force
dans la partie xargs?svn status
svn remove
chaque fichierla source
-r
auxxargs
options (ne pas exécuter, si aucun argument n'est donné). De plus, le nombre d'arguments doit être limité et les suppressions doivent être groupées car l'appel échoue avec un très grand nombre de fichiers à supprimer, par exemple-n 500
. Et le dernier mais non le moindre, la citation effectuée est sous-optimale pour les fichiers contenant des spéciaux du shell comme$
- mieux utiliser\n
comme délimiteur et laisser les guillemets àxargs
:svn status | grep "!" | cut -d! -f2 | sed 's/^ *//' | xargs -n 500 -d "\n" -r svn rm
Je viens de trouver ceci, ce qui fait l'affaire, supprimez tous les fichiers «manquants» d'une copie de travail SVN :
la source
Merci à Paul Martin pour la version Windows.
Voici une légère modification du script afin que les fichiers Windows avec des espaces soient également pris en compte. Le
missing.list
fichier sera également supprimé à la fin.J'ai enregistré ce qui suit dans svndel.bat dans mon répertoire bin SVN (défini dans mon environnement %% PATH) afin qu'il puisse être appelé à partir de n'importe quel dossier à l'invite de commande.
la source
del missing.list 2>NUL
, car j'ai ajouté tous les nouveaux fichiers directement après la première suppression des fichiers supprimés, donc il a été ajoutémissing.list
à svn: asvn delete "missing.list"
fonctionné pour moiJ'aime l'option PowerShell ... Mais voici une autre option si vous utilisez des scripts batch Windows:
la source
Une alternative qui fonctionne sous Linux (bash) pour les fichiers à supprimer ne contenant pas d'espaces dans le chemin:
la source
Ce script shell examine de manière récursive (
svn status
) les répertoires de votre projet, supprimant les fichiers manquants (comme l'exige la question) et ajoutant de nouveaux fichiers au référentiel. Il s'agit d'une sorte de "stocker dans le référentiel l'instantané actuel du projet".la source
Une légère modification de la ligne de commande, qui fonctionne sur Mac OS (espérons-le même sous Linux) et gère les fichiers que la commande "svm sr" rapporte, comme "! M" (manquant et modifié).
Il fait face aux espaces dans les fichiers.
Il est basé sur une modification d'une réponse précédente:
la source
Il est en fait possible de supprimer complètement le
missing.list
de user3689460 et Paul Martinla source
Lorsqu'il s'agit d'un grand nombre de fichiers, il peut arriver que l'argument entré dans xargs devienne trop long. J'ai opté pour une implémentation plus naïve qui fonctionne également dans ce cas.
Ceci est pour Linux:
la source
Version améliorée
La commande complète est donc:
la source