2009-12-03 25 views
3

Disons que j'ai des copies de travail de plusieurs dossiers différents de mon référentiel SVN dispersés dans mon système de fichiers. Leurs répertoires parents ne font pas partie du référentiel. Par exemple.Subversion: Puis-je valider plusieurs dossiers extraits à la fois?

somedir1\ 
    workingcopyOfA\ 
    workingcopyOfB\ 
somedir2\ 
    somedir3\ 
     workingcopyOfC\ 
    workingcopyOfD\ 

Maintenant, ils contiennent tous les changements que je voudrais check-in à la fois (appel svn une seule fois pour des raisons pratiques, en utilisant seulement un nouveau numéro de révision pour la simplicité).

Est-ce possible? Est-ce à quoi servent les changelistes? Que puis-je faire si j'utilise svn < v1.5?

(Il y a des questions similaires ici sur le SO, mais ils se réfèrent à des problèmes différents.)

EDIT: Pour clarifier: Les copies de travail appartiennent tous au même référentiel, mais les différentes parties, à savoir l'aspect référentiel comme ceci:

RepoDirA\ 
RepoDirB\ 
RepoDirC\ 
RepoDirD\ 

Répondre

3

Comme d'autres l'ont noté, ce n'est pas possible comme c'est le cas pour de bonnes raisons (voir notamment la réponse de D Garcia).

Si eclipse supporte quelque chose comme ça, je suppose qu'il crée plusieurs checkins derrière votre dos.

Cependant, il est possible de comparer les changements dans un répertoire de travail et d'appliquer ces changements à l'autre répertoire de travail (s'ils se chevauchent). Une fois que vous avez fait cela, tous vos changements sont dans le répertoire de travail unique où vous pouvez vous enregistrer depuis. Les problèmes de fusion que D Garcia a pointés sont maintenant votre responsabilité de résoudre au moment du patch.

Si vos répertoires de travail ne se chevauchent pas, et que la seule raison pour laquelle vous avez plusieurs répertoires de travail est que, par exemple, vous ne vouliez pas extraire tout le dépôt, je suggère de vérifier la hiérarchie à la racine commune de vos répertoires de travail, mais non récursivement (en utilisant svn co -N root) et ensuite obtenir les répertoires de travail spécifiques avec svn update path/to/subsetOfInterest pour les répertoires intermédiaires). De cette façon, ils vivent tous dans le même répertoire de travail, et permettent de travailler dessus atomiquement.

1

Je sais que Eclipse peut le faire, mais peut-être qu'ils utilisent quelques trucs à l'intérieur (parce que vous pouvez commettre des projets qui utilisent différents référentiels, aussi, par exemple celui qui est dans CVS et l'autre dans SVN).

Je suggère de simplement essayer avec votre client. Si cela ne fonctionne pas, une erreur s'affichera. Vous ne pouvez pas casser quoi que ce soit.

0

Je pense que ce n'est pas possible, pas par la ligne de commande et pas avec TortoiseSVN. Mais il pourrait y avoir des outils qui rendent cela possible. Vous pouvez écrire un script bach pour ça aussi. Les changelists sont quelque chose d'autre, ici vous pouvez regrouper quelques modifications dans une même table de travail afin de les valider séparément.

+0

Un outil comme SVN-Monitor kan aide beaucoup, il a une fonction pour mettre à jour plusieurs copies de travail, mais je n'ai pas trouvé de validation. – Jochen

1

Il ne semble pas que vous le pouvez. Je l'ai essayé ici, où j'ai souvent plusieurs copies de travail extraites. Subversion devient grincheux à propos de l'absence de répertoire .svn dans la racine commune des dossiers que vous essayez d'archiver.

Bien sûr, si toutes vos copies de travail se réfèrent au même chemin du référentiel - ce serait vraiment mauvaise chose à permettre. On s'attendrait à ce que subversion fusionne localement 4 ensembles de changements avant de les placer dans le dépôt, ce qui pourrait rendre la résolution de conflit amusante :)

Notez que c'était avec la subversion 1.4.5. Dans la version 1.5, il semble que les listes de modifications concernent davantage le fait de disposer de plusieurs jeux de modifications dans le même répertoire de travail et de pouvoir les traiter séparément plutôt que d'avoir plusieurs répertoires de travail et de les traiter comme une seule entité.

0

Je pense que les ensembles de listes de modifications sont conservés dans un référentiel par référentiel - ainsi, dans votre exemple, les copies de travail A B & C doivent toutes être dans le même référentiel. Ensuite, vous devrez ajouter individuellement chacune des copies de travail à la même liste de modifications.

Je ne peux pas le tester (jusqu'à la fin) mais la configuration semble fonctionner.