Question

J'ai une prise en pension de subversion avec la mise en page suivante:

svnrepo/projectA/trunk
svnrepo/projectA/tags
svnrepo/projectA/branches
svnrepo/projectB/trunk
svnrepo/projectB/tags
svnrepo/projectB/branches


que je voudrais passer à un repo Mercurial avec une mise en page révisée:
hgrepo / projeta
hgrepo / ProjectB

Quelle est la meilleure façon de le faire? Certains de mes pensées sont:

Option1

Réarrangez les chemins de renversement (en utilisant svn move) à un format intermédiaire:

svnrepo/trunk/projectA
svnrepo/trunk/projectB
svnrepo/tags/projectA
svnrepo/tags/projectB
svnrepo/branches/projectA
svnrepo/branches/projectB

puis hg convertir sur le svnrepo / tronc. Est-ce que cette confusion importation hg?

2 hg convertir chacun des projets / trunk dans repo hg séparés. Puis les fusionner en un seul repo hg (en utilisant init hg, hg pull -f projectA, etc.). Je pense que cela va perdre les noms des succursales et des étiquettes sur le premier projet importé.

Était-ce utile?

La solution

Dans Mercurial, le stockage codebases indépendants dans le même référentiel est une mauvaise idée car il va

  • compliquer considérablement la fusion. Fusionne dépendra des modifications apportées à tous projets, plutôt que le projet que vous essayez de fusionner.
  • Stockage Cause et les frais généraux de la caisse - Mercurial, pour autant que je sache, ne prend pas en charge de vérifier que les sous-répertoires d'un référentiel. Il faudrait ramifier tous les projets à la fois.

La solution consiste à convertir votre seul dépôt Subversion dans plusieurs référentiels Mercurial. La plupart des outils de conversion appui.

Autres conseils

Chaque projet doit être dans son propre dépôt Hg (pour être en mesure d'obtenir ou étiquette seulement un projet spécifique).

Rappelez-vous que le répertoire que vous voyez dans Subversion (tronc, les balises, les branches) n'existent dans les VCS modernes (D), où les branches et les étiquettes sont le premier citoyen de la classe (par exemple méta-données gérées directement par l'outil), comme opposition que simple répertoire résultant d'un pas cher copier (SVN).

Cela signifie que lorsque vous convertissez un dépôt SVN, vous ne devriez pas stocker directement un répertoire « trunk », « tags » ou « branches » dans l'histoire de la prise en pension Hg.

Vous devriez plutôt utiliser un comme hgsubversion à importer votre repo SVN (comme juste "repo / projeta") dans un repo Hg dédié à la projectA. il gardera les balises et les branches du projet SVN Orignal et les convertir en objets Hg.
De sa documentation :

  

Toutes les mises à jour à l'aide de hgpullsvn sont faites dans la branche nommée du dernier composant de l'URL SVN (par exemple, si l'URL SVN est svn://server/myproj/branches/feature-ZZZ, hgpullsvn va créer et utiliser la branche nommée « feature-ZZZ »)


Si vous ne voulez pas "convertir" mais "synchronisation", recommande tonfa hgsubversion , bien qu'il "est actuellement dans un état de flux en raison de refactoring lourd":

  

En ce moment, il est pas prêt à l'emploi de la production. Vous ne devriez utiliser si vous êtes prêt à pirater sur elle, et faire de la plongée dans les entrailles de Mercurial et / ou Subversion.

Depuis hgsvn également permettre une synchronisation par hgpushsvn et hgpullsvn ... Je tiendrais avec hgsvn pour l'instant.

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