2010-03-25 5 views
2

J'ai joué avec différents systèmes de gestion de versions pour en trouver un que je suis à l'aise. J'ai commencé avec SVN (appelons cette version du projet "f1"), puis j'ai changé pour GIT. Mais je ne savais pas comment convertir l'ancien repo SVN en GIT, donc j'ai juste copié le dossier, supprimé les trucs .svn, et l'ai transformé en un repo GIT (appelons cette version copiée "f2").convertir ancien dépôt à mercurial

Maintenant, je joue avec Mercurial et était très heureux de constater qu'il a un client Tortoise pour Windows. J'étais aussi content de voir combien il était facile de convertir le repo de GIT en Mercurial, donc j'ai préservé l'histoire (je l'ai toujours clonée en premier, juste au cas ou j'appelle cette version hg "f3").

Mais maintenant je me demande: qu'est-ce que je fais avec l'ancien dépôt SVN qui contient toujours mon historique de avant J'ai joué avec GIT? Je suppose que je peux convertir l'ancien repo SVN en Mercurial, mais puis-je fusionner ces deux historiques dans le référentiel unique afin d'avoir un ensemble complet d'histoires en un seul endroit? En d'autres termes, puis-je ajouter f1 à f3?

Répondre

2

Vous ne pouvez pas précédez à f1 f3 au sens historique/ancêtre littéral sans changer fondamentalement f3, parce que chaque révision Mercurial est identifiée par un code de hachage, et que hashcode est construit à partir de (entre autres) le contenu de la révision et les hachages de ses parents. Donc changer le parent du premier nœud de f3 changerait tous les hashcodes de f3.

Donc vous pouvez préfixer f1 à f3 si vous êtes prêt à régénérer f3 dans le processus cédant, disons f4. Cela invaliderait tous les clones de f3 - mais si vous êtes une équipe d'une seule personne, cela pourrait vous convenir.

Si vous n'êtes pas d'accord avec la modification de chaque hachage en f3 (et je ne serais pas) une autre option (pas très bonne) est d'utiliser hg convert pour créer un nouveau dépôt de mercure de f1, appelons-le f5, et puis à hg pull -f f5 en f3. Puisqu'aucun ensemble de modifications dans f5 ne serait un ancêtre ou un enfant d'un ensemble de modifications de f3 - aucune lignée commune - vous finiriez avec deux têtes et deux flux de changesets. Certaines personnes le font, mais honnêtement, je ne vois aucun avantage réel à le faire.

Où je vous, je voudrais juste convertir f1 en f5 (un repo mercurial avec toute votre vieille histoire) et puis le garder autour pour référence.

+0

Tout cela ressemble à beaucoup plus de travail que ça en vaut la peine. J'ai un historique complet, même si c'est dans deux dépôts séparés. Mais j'apprends plus sur Mercurial tous les jours :) Merci. – nedlud

1

Avez-vous essayé le Transplant extension? Il vous permet d'effectuer des modifications, même si le référentiel n'est pas lié.

Donc, ce que vous pouvez faire est de prendre f1, faites-le convertir à votre nouveau dépôt, appelé HGSVN. Ce repo vous tiendra toute l'histoire svn-créée. Si vous n'avez plus fait de modifications dans f1, vous savez que f3 contient toutes les modifications après la copie (f2). Maintenant, vous pouvez utiliser la transplantation, pour obtenir tous les changements ultérieurs dans HGSVN. Oui, les sha1-sums auraient été changés, mais comme HGSVN contient maintenant tout votre historique de développement, vous pouvez oublier les autres dépôts.

BTW. Je vous recommande de faire un clone de sauvegarde avant de faire la greffe proprement dite. De cette façon, vous pouvez le faire à nouveau, si vous avez mal les commandes. J'espère que cette aide.

+0

C'est une bonne idée. Mais je vais encore lever les bras en l'air et dire que tout ça c'est plus de travail que ça en vaut la peine;) – nedlud

Questions connexes