2009-10-04 10 views
184

Y a-t-il un moyen de valider uniquement une liste de fichiers spécifiques (par exemple un seul de la liste de fichiers que SVN veut valider). Je travaille sur MAC OS X sous Terminal, sans interface utilisateur.SVN Valider des fichiers spécifiques

Répondre

293

Bien sûr. Lister simplement les fichiers:

$ svn ci -m "Fixed all those horrible crashes" foo bar baz graphics/logo.png 

Je ne suis pas au courant d'un moyen de lui dire d'ignorer un certain ensemble de fichiers. Bien sûr, si les fichiers que vous ne souhaitez engager sont facilement répertoriés par le shell, vous pouvez l'utiliser:

$ svn ci -m "No longer sets printer on fire" printer-driver/*.c 

Vous pouvez également la commande svn lire la liste des fichiers à livrer à partir d'un fichier:

$ svn ci -m "Now works" --targets fix4711.txt 
+1

donc, fondamentalement, je devrais nommer les fichiers explicitement? je ne peux pas dire ne touchez pas ce fichier en particulier? – 0100110010101

+13

vous pourriez faire: svn st | Cut -c 9-> targets.txt, puis modifiez le fichier targets.txt pour supprimer le fichier spécifique et utilisez le paramètre --targets pour spécifier la liste de fichiers. – rein

+14

Je pense que mon nouveau défi est de * créer * un bug qui met le feu à l'imprimante. –

38

vous essentiellement mettre les fichiers que vous souhaitez engager sur la ligne de commande

svn ci file1 file2 dir1/file3 
+1

donc, fondamentalement, je devrais nommer les fichiers explicitement? je ne peux pas dire ne touchez pas ce fichier en particulier? – 0100110010101

+2

si exécuté sans arguments svn valide tous les fichiers modifiés si exécuté avec un fichier comme argument ce fichier est validé si exécuté avec un répertoire tous les fichiers modifiés dans le répertoire sont validés – Wienczny

9

Outre la liste des fichiers explicitement comme indiqué par unwind et Wienczny, vous pouvez configurer des listes de modifications et les vérifier. Ils vous permettent de gérer des ensembles de modifications disjoints dans la même copie de travail. Vous pouvez lire à leur sujet dans le online version of the excellent SVN book.

7

essayer ce script ..

#!/bin/bash 
NULL="_" 
for f in `svn st|grep -v ^\?|sed s/.\ *//`; 
    do LIST="${LIST} $f $NULL on"; 
done 
dialog --checklist "Select files to commit" 30 60 30 $LIST 2>/tmp/svnlist.txt 
svn ci `cat /tmp/svnlist.txt|sed 's/"//g'` 
+0

Ailerons de fourches. Merci ! –

22

En raison de mon état de subversion, je devais faire preuve de créativité. svn st a montré M, A et ~ états. Je ne voulais M et A donc ...

svn st | grep ^[A\|M] | cut -d' ' -f8- > targets.txt 

Cette commande dit trouver toutes les sorties lignes par svn st qui commencent par M ou A, découpé à l'aide delimiter espace, puis obtenir 8 à colums la fin. Videz-le dans targets.txt et remplacez-le.

Puis modifiez targets.txt pour élaguer la liste de fichiers plus loin. Ensuite, exécutez ci-dessous pour commettre:

svn ci -m "My commit message" --targets targets.txt 

Probablement pas l'utilisation le plus courant, mais nous espérons que cela aide quelqu'un.

+2

Vous pouvez également utiliser 'grep -v '^ ~'' pour mettre sur liste noire ce que vous voulez. –

46

Utilisez les listes de modifications. L'avantage par rapport à la spécification des fichiers est que vous pouvez visualiser et confirmer tout ce que vous voulez réellement inclure avant de valider.

$ svn changelist fix-issue-237 foo.c 
Path 'foo.c' is now a member of changelist 'fix-issue-237'. 

Cela fait, svn garde maintenant les choses séparées pour vous. Cela aide lorsque vous jonglez avec plusieurs changements

$ svn status 
A  bar.c 
A  baz.c 

--- Changelist 'fix-issue-237': 
A  foo.c 

Enfin, dites-lui de valider ce que vous vouliez changer.

$ svn commit --changelist fix-issue-237 -m "Issue 237" 
+0

+1 pour la réponse ponctuelle. Les changelistes sont vraiment la voie à suivre! –

+1

Si vous souhaitez ajouter de nouveaux répertoires à une liste de modifications, n'oubliez pas d'utiliser svn add en premier, puis utilisez 'svn liste-chang-fix-237 --recursive chemin/vers/répertoire' –

+0

Actuellement, les listes de modifications ne peuvent pas être utilisées avec de nouveaux répertoires .... "Subversion ne supporte pas actuellement l'utilisation des listes de changements avec les répertoires." –

1

Je fais un (sous) dossier nommé « cacher », déplacez le fichier que je ne suis pas veulent engagé à y. Puis faites mon commit, en ignorant la plainte sur le fichier manquant. Ensuite, déplacez le fichier caché de cacher à./

Je ne connais aucun inconvénient à cette tactique.

Questions connexes