Question

Je souhaite convertir un projet CVS en Subversion à l'aide de cvs2svn. Il possède un coffre principal (HEAD), avec plusieurs branches de développement temporaires créées à partir du coffre.

Avant de le convertir, nous allons fusionner les dernières modifications du tronc dans toutes les branches de dev. Mais ils auront également des modifications qui n'ont pas encore été fusionnées.

Lorsque je convertis le projet en SVN, il ne possède aucune des propriétés de l'historique de fusion. Alors, comment puis-je initialiser ces propriétés pour pouvoir ensuite fusionner vers et depuis les branches?

En d’autres termes, après la conversion, il y aura un certain nombre de différences entre le tronc et une branche donnée. La prochaine fois que je fusionnerai du tronc dans la branche, je ne veux pas voir ces différences comme des modifications à fusionner. Mais quand je fusionne de la branche dans le coffre, je le fais. Est-ce possible?

MISE À JOUR : j'ai suivi la suggestion de Mhagger et indiqué à SVN que toutes les modifications avaient déjà été intégrées dans le tronc des branches:

svn co [branch URL] .
svn merge --record-only [trunk URL]
svn commit -m ''

Cela fonctionne. Ainsi, la prochaine fois que j'essaierai de fusionner le tronc dans une branche, aucun changement ne sera affiché.

Mais j'ai toujours un problème avec --reintegrate fusions, de la branche au tronc. Il finit par afficher de nombreux fichiers "R" remplacés, ce qui signifie que la ligne réseau contient un fichier X et que la branche possède un fichier X, mais ils ne sont pas considérés comme le même fichier. Cela rend la fusion un peu confuse, même si cela semble donner les bons résultats.

Je pense que cela se produit à cause de la séquence d'événements suivante:

  • La branche a été créée (dans CVS)
  • Un fichier X a été ajouté au coffre (dans CVS)
  • X a été fusionné dans la branche (également dans CVS)
  • Le projet a été converti en Subversion
  • Subversion ne savait pas que la branche / X avait été copiée à partir du tronc / X. Donc ça pense que c'est un remplaçant.

L'historique SVN ressemble à ceci:

r100: create branch (copied from trunk)
r200: add trunk/X
r300: add branch/X (because of a CVS merge, but it's not a SVN copy)

Alors, est-il possible pour moi de dire à Subversion d'ignorer les fichiers ascendance lors d'une fusion --intégration? Ou un meilleur moyen de convertir ces fichiers?

Était-ce utile?

La solution 2

OK, je pense avoir une solution de contournement pour le problème --intégration ci-dessus, au cas où quelqu'un serait intéressé.

Selon ce document , si je 'ai fusionné la dernière version du coffre dans la branche, faire un --reintegrate revient à peu près à faire le même chemin que le tronc:

svn merge [trunk URL] [branch URL]

Mais cette syntaxe autorise --ignore-ascestry, ce que - ne pas réintégrer. Donc je peux faire:

svn merge --ignore-ancestry [trunk URL] [branch URL]

Cela me donne les mêmes résultats qu’un --reintegrate, sans tous les fichiers "R" remplacés. La seule autre différence semble être les propriétés mergeinfo. Je ne sais pas si cela sera correct, il est donc probablement préférable de supprimer la branche ultérieurement, comme vous le feriez après une - réintégration.

Autres conseils

Comme vous le savez probablement, cvs2svn ne génère aucune métadonnée de fusion, à l'exception des informations implicites sur l'origine des branches. (Cela ne peut pas, car CVS n'enregistre pas de telles informations.) Ainsi, après la conversion, vous devrez informer explicitement Subversion des fusions effectuées sous CVS.

La méthode la plus simple consiste à utiliser le code & <; svn merge --record-only ... ", comme décrit dans le livre Subversion .

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