Fichiers spécifiques à SVN Commit

219

Existe-t-il un moyen de valider uniquement une liste de fichiers spécifiques (par exemple, l'un des fichiers que SVN souhaite valider).

Je travaille sur MAC OS X sous Terminal, sans aucune interface utilisateur.

0100110010101
la source

Réponses:

331

Sûr. Énumérez 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 souhaitez valider sont facilement répertoriés par le shell, vous pouvez utiliser cela:

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

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

$ svn ci -m "Now works" --targets fix4711.txt
se détendre
la source
1
donc, fondamentalement, je devrais nommer les fichiers explicitement? je ne peux pas simplement dire ne pas toucher à ce fichier particulier?
0100110010101
16
vous pourriez faire: svn st | couper -c 9-> targets.txt, puis éditer le fichier target.txt pour supprimer le fichier spécifique et utiliser le paramètre --targets pour spécifier la liste de fichiers.
rêvez
17
Je pense que mon nouveau défi est de créer un bug qui met le feu à l'imprimante.
James Webster
3
C'est à la fois pathétique et ridicule. Pas de zone de rassemblement. svn addest utilisé pour ajouter des fichiers aux référentiels.
Kandinski
68

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

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

Cela fait, svn garde 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"
jcwenger
la source
+1 pour une réponse ponctuelle. Les listes de modifications sont vraiment le chemin à parcourir!
Miro Markaravanes
1
Si vous souhaitez ajouter de nouveaux répertoires à une liste de modifications, n'oubliez pas d'utiliser svn add en premier, puis utilisezsvn changelist fix-issue-237 --recursive path/to/directory
Fabian Schmengler
En fait, les listes de modifications ne peuvent pas être utilisées avec de nouveaux répertoires .... "Subversion ne prend actuellement pas en charge l'utilisation de listes de modifications avec les répertoires."
Fabian Schmengler
1
@fschmengler: SVN est un horrible outil. J'essayais juste de tirer le meilleur parti du mauvais travail qu'il fait. Passez à git. : P
jcwenger
10
Je suis passé à Git il y a de nombreuses années et je n'ai jamais regardé en arrière. A été obligé d'utiliser à nouveau svn pour un client, on a l'impression de courir avec une balle et une chaîne aux deux jambes
Fabian Schmengler
38

Vous mettez essentiellement les fichiers que vous souhaitez valider sur la ligne de commande

svn ci file1 file2 dir1/file3
Wienczny
la source
1
donc, fondamentalement, je devrais nommer les fichiers explicitement? je ne peux pas simplement dire ne pas toucher à ce fichier particulier?
0100110010101
2
si exécuté sans arguments, svn valide tous les fichiers modifiés s'il est exécuté avec un fichier comme argument, ce fichier est validé s'il est exécuté avec un répertoire, tous les fichiers modifiés dans le répertoire sont
validés
22

En raison de mon état de subversion, j'ai dû faire preuve de créativité. svn stmontré M, Aet les ~statuts. Je voulais seulement Met Adonc ...

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

Cette commande indique de trouver toutes les lignes générées par svn stqui commencent par Mou A, coupent à l'aide du délimiteur d'espace, puis obtiennent les colonnes 8 à la fin. Vider cela dans target.txt et écraser.

Modifiez ensuite le fichier target.txt pour affiner davantage la liste des fichiers. Ensuite, exécutez ci-dessous pour valider:

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

Ce n'est probablement pas le cas d'utilisation le plus courant, mais j'espère que cela aide quelqu'un.

Eric
la source
2
Vous pouvez également utiliser grep -v '^~'pour mettre sur liste noire ce que vous voulez.
Martin Konecny
10

En plus de la liste des fichiers explicitement comme indiqué par dérouleur et Wienczny , vous pouvez les listes de modifications de configuration et checkin ceux - ci. Ceux-ci vous permettent de gérer des ensembles de modifications disjoints sur la même copie de travail.

Vous pouvez les lire dans la version en ligne de l'excellent livre SVN .

sbi
la source
7

essayez 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'`
Abhijit Dhariya
la source
1

Je crée un (sous) dossier nommé "hide", je déplace le fichier dans lequel je ne veux pas le valider. Ensuite, faites mon commit, en ignorant la plainte concernant le fichier manquant. Ensuite, déplacez le fichier masqué de masquer vers ./

Je ne connais aucun inconvénient à cette tactique.

George Wyche
la source