2008-08-15 4 views
84

J'ai deux référentiels distincts. À ce stade, il est logique qu'ils «deviennent un» parce que je veux travailler sur les deux projets simultanément.Comment combiner deux projets dans Mercurial?

J'aimerais vraiment que les deux projets soient chacun un sous-répertoire dans le nouveau référentiel.

  1. Comment fusionner les deux projets?
  2. Est-ce une bonne idée, ou devrais-je les garder séparées?

Il semble que je devrais être capable de pousser d'un dépôt à l'autre ... Peut-être que c'est vraiment simple?

Répondre

69

j'ai pu combiner mes deux référentiels ainsi:

  1. Utilisez hg clone first_repository pour cloner un des référentiels. Utilisez hg pull -f other_repository pour extraire le code de l'autre référentiel.

Le -f (force) drapeau sur la traction est la clé - il est dit d'ignorer le fait que les deux dépôts ne sont pas de la même source.

Voici les the docs pour cette fonctionnalité.

+1

Est-ce que cela préserve également les clés de hachage des commissions du deuxième dépôt? (Je suppose que non, mais ça pourrait aller jusqu'à ce que vous fassiez une fusion.) – Macke

+6

Cela fonctionne, mais vous devrez aussi lancer 'hg merge' pour que tout fonctionne enfin –

+7

** @ Marcus Lindblom: ** tirant un changeset ne changera jamais son hash. Si vous regardez 'hg glog' après avoir fait cela, vous verrez que vous avez deux lignes de changements indépendants. Le premier changeset dans chaque ligne n'a pas de parent, mais ce n'est pas un problème pour Mercurial. Une fois que vous tirez, vous voulez créer un nouveau changeset pour chaque ligne où vous 'hg mv' tout dans le sous-dossier approprié, puis vous fusionnez les lignes et vous êtes tous ensemble. –

3

Si vous n'utilisez pas le même code dans les projets, gardez-les séparés. Vous pouvez définir votre référentiel personnel de chacun de ces projets pour être juste un répertoire à part. Pourquoi mélanger toutes les branches, fusionner, et commettre des commentaires quand vous n'avez pas à le faire.

A propos de votre modification: Passer d'un référentiel à un autre. Vous pouvez toujours utiliser la commande transplant. Bien que tout cela soit vraiment à côté de votre désir de combiner les deux, de sorte que vous pourriez vous sentir mal à l'aise en utilisant mes suggestions. Ensuite, vous pouvez utiliser l'extension de la forêt, ou quelque chose.

hg transplant -s REPOSITORY lower_rev:high_rev 
7

hg a commencé à avoir subrepo depuis 1.3 (2009-07-01). Les premières versions étaient incomplètes et instables mais maintenant c'est assez utilisable.

+2

J'ai trouvé que les sous-rapports à être une douleur à travailler avec. Ils fonctionnent, mais vous devez sauter à travers des cerceaux pour les amener à se comporter et peut être la source de beaucoup de maux de tête si vous ne faites pas attention. –

+4

Peut-être noter que les sous-dépôts sont officiellement une caractéristique de dernier recours: http://mercurial.selenic.com/wiki/Subrepository (à partir de 2013.11.12) – jtpereyda

Questions connexes