Question

J'utilise cvs2svn pour convertir mon dépôt. Je l'ai fait avec succès dans un référentiel, et maintenant mon nouveau problème est un second dépôt.

Dans ma nouvelle conversion, je veux convertir seulement la tête et une branche. cvs2svn n'ont une fonction « exclure » pour les branches, mais pas « comprendre ». J'ai beaucoup de branches et excluant chacun d'entre eux prendra beaucoup de travail ....

est-il possible de convertir seulement le tronc (HEAD) et une seule branche?

merci, Oded

Était-ce utile?

La solution

Si vous voulez seulement conserver une branche et aucune balise , alors c'est facile. La première règle qui correspond à un symbole est utilisé, donc spécifier la branche que vous souhaitez inclure alors exclure tout autre:

cvs2svn --force-branch=mybranch --exclude='.*' ...

Si vous voulez inclure non seulement la branche, mais aussi autant de balises que possible, alors il est un peu plus délicat. Non seulement tu ne sais pas nécessairement les noms de toutes les balises, mais vous ne pouvez pas non plus inclure des balises qui dépendent des branches exclues. Dans ce cas, il est plus facile de travailler avec les --write-symbole-info et --symbol-hints Options:

cvs2svn --write-symbol-info=symbol-info.out --passes=1:3 ...

Cela va créer un fichier appelé « symbole info.out » contenant des informations sur tous les symboles CVS. Dans votre éditeur, ouvrez ce fichier, trouver toutes les lignes correspondant aux branches que vous voulez exclure, et changer la troisième colonne de ces lignes au mot « exclure ». Assurez-vous que la troisième colonne de la ligne pour la branche que vous souhaitez inclure contient le mot « branche » et sa quatrième colonne est le chemin où vous voulez qu'il finir.

Exécuter maintenant cvs2svn à nouveau, à partir de 3 passe, et en utilisant le fichier symbole-info édité comme un symbole laisse deviner fichier:

cvs2svn --symbol-hints=symbol-info.out --passes=3 ...

vous obtiendrez beaucoup d'erreurs comme:

ERROR: ExcludedSymbol('FOO_BRANCH') cannot be excluded because the following symbols depend on it:
    BAR_TAG
    BAZ_TAG

Maintenant, retournez dans l'éditeur et modifier les balises cotées (BAR_TAG et BAZ_TAG dans l'exemple) à exclure aussi, essayez à nouveau en cours d'exécution pass3. Cette procédure pourrait devoir être itéré deux ou trois fois, mais il ne devrait pas être compliqué, car pass3 fonctionne très rapidement.

Lorsque vous avez obtenu pass3 pour terminer sans erreurs, exécutez le reste de la conversion:

cvs2svn --symbol-hints=symbol-info.out --passes=4: ...

Autres conseils

Un problème est que cvs2svn a besoin non seulement de déterminer si d'inclure une branche ou non, mais (en même temps) si un symbole est une branche ou une étiquette en premier lieu. Donc, si vous voulez inclure qu'une branche, ainsi que quelques balises, il est plus difficile que de dire « ne comprennent que cette branche. » - cela ne ferait tuer tous les tags

OIEau, cvs2svn ne supporte pas vraiment. Vous pouvez contourner en modifiant son code source. En cvs2svn_lib.symbol_strategy.BranchIfCommits, changer le cas où il retourne Branch (symbole) à

   if symbol.name == 'my_branch':
       return Branch(symbol)
   else:
       return ExcludedSymbol(symbol)

IIUC, BranchIfCommits doit être utilisé par défaut.

Personnellement, j'utiliser une autre stratégie:

 1. convert the repository once, with all branches.
 2. do a "svn ls" on branches, and redirect that into a file.
 3. edit the file to construct an exclude regex out of it, of the form `b1|b2|...|bn`

Je ne dirais pas que beaucoup de travail ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top