Comment combiner deux projets dans Mercurial?

84

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

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és?

Il semble que je devrais pouvoir passer d'un référentiel à l'autre ... Peut-être que c'est vraiment simple?

jm.
la source

Réponses:

69

J'ai pu combiner mes deux référentiels de cette manière:

  1. Utilisez hg clone first_repositorypour cloner l'un des référentiels.
  2. Utilisez hg pull -f other_repositorypour extraire le code de l'autre référentiel.

Le -fdrapeau (force) sur l'extraction est la clé - il dit d'ignorer le fait que les deux référentiels ne proviennent pas de la même source.

Voici la documentation de cette fonctionnalité.

jm.
la source
1
Cela préserve-t-il également les clés de hachage des commits 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 également courir hg mergepour que tout fonctionne enfin
Factor Mystic
7
@Marcus Lindblom: tirer un changeset ne changera jamais, jamais son hachage. Si vous regardez hg glogaprès avoir fait cela, vous verrez que vous avez deux lignes de jeux de modifications non liées. Le premier changeset de chaque ligne n'a pas de parent, mais ce n'est pas un problème pour Mercurial. Une fois que vous tirez, vous voudrez créer un nouvel ensemble de modifications pour chaque ligne où vous avez hg mvtout dans le sous-dossier approprié, puis vous fusionnez les lignes et vous êtes prêt.
Steve Losh
1
et si les deux référentiels ont un code commun aux deux. Cela serait-il automatiquement géré par la fusion? et quant à la fusion, on peut dire que $ hg merge?
kamal
2
à des fins de référence, voici la documentation de ce processus mercurial.selenic.com/wiki/MergingUnrelatedRepositories
Gent
7

hg a commencé à être subrepo depuis le 1.3 ( 01/07/2009 ). Les premières versions étaient incomplètes et instables, mais elles sont désormais assez utilisables.

Geoffrey Zheng
la source
2
J'ai trouvé que les subrepos étaient difficiles à travailler. Ils fonctionnent mais il faut sauter à travers quelques cerceaux pour les faire se comporter et peuvent être la source de beaucoup de maux de tête si on ne fait pas attention.
Pete Duncanson
4
Il convient de noter que les sous-référentiels sont officiellement une fonctionnalité de dernier recours: mercurial.selenic.com/wiki/Subrepository (à partir du 12/11/2013)
jtpereyda
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 comme un simple répertoire à part. Pourquoi mélanger toutes les branches, fusionner et valider les commentaires lorsque vous n'avez pas à le faire.

À propos de votre modification: Pousser d'un référentiel à un autre. Vous pouvez toujours utiliser la transplantcommande. Bien que tout cela ne fasse pas partie de votre désir de combiner les deux, vous pourriez donc vous sentir mal à l'aise en utilisant mes suggestions. Ensuite, vous pouvez utiliser l'extension de forêt, ou quelque chose.

hg transplant -s REPOSITORY lower_rev:high_rev
nlucaroni
la source