web-dev-qa-db-fra.com

Fusion de succursales Mercurial à partir de référentiels distincts

J'essaie de comprendre comment fusionner les branches d'un référentiel séparé dans le courant.

J'ai ce qui suit:

PJT1 - contient les branches par défaut et foodog

PJT2 - contient la branche par défaut

de PJT2, je fais ce qui suit:

$ hg fetch -y ../PJT1 -r foodog -m "this is a test"

Maintenant, si je regarde dans PJT2, je vois les fichiers et les modifications corrects. Cependant, si je fais hg branches, J'obtiens ce qui suit:

[someone@myhome pjt2]$ hg branches
foodog                         1:c1e14fde816b
default                        0:7b1adb938f71 (inactive)

et hg branch révèle ce qui suit:

[someone@myhome pjt2]$ hg branch
foodog

Comment puis-je obtenir le contenu de la branche foodog de PJT1 dans la branche default de PJT2?

30
Paul

Vous devez fusionner, mais gardez à l'esprit que les changements sur la branche foodog seront toujours sur foodog - les branches ne disparaissent jamais mais elles peuvent être cachées. Cette séquence de commandes est aussi proche que possible de ce que vous demandez:

cd PJT2
hg update default # just in case you were somewhere else
hg pull ../PJT1 -r foodog  # that gets you foodog
hg merge foodog  # that merges the changes into default
hg commit # commit the merge
hg update foodog # go to the most recent change in foodog (note: it is not a 'head')
hg commit --close-branch

Après la fusion hg branches affichera toujours foodog sauf si vous le faites hg branches --active qui ne montre que les branches qui ont des têtes dessus. Après le commit --close-branch vous ne verrez pas foodog sauf si vous le faites hg branches --closed.

C'est parce que les branches de Mercurial ne disparaissent jamais complètement (une caractéristique de conception) qu'elles sont souvent réservées uniquement à des choses permanentes comme release-1.0 ou stable. Pour les efforts de courte durée comme les bogues et les fonctionnalités, envisagez plutôt d'utiliser des signets. Voici une grande comparaison des deux: http://stevelosh.com/blog/2009/08/a-guide-to-branching-in-Mercurial

55
Ry4an Brase

Vous pouvez également essayer d'utiliser l'extension rebase . Cela ressemblerait à quelque chose comme ceci:

hg fetch -y ../PJT1 -r foodog -m "this is a test"
hg rebase --source <sRev> --dest <dRev>

L'action de rebase détachera le changeset sRev et tous les descendants et appliquera le groupe de changements au changeset dRev . Par défaut, les modifications seront appliquées sur la branche par défaut. Donc, dans votre cas, sRev serait le premier ensemble de modifications sur la branche foodog et dRev serait le jeu de modifications par défaut auquel vous souhaitez les appliquer .

Enfin, si vous souhaitez remplacer cela et conserver le nom de la branche source, vous pouvez utiliser l'option de rebase --keepbranches. Vos questions indiquent que c'est exactement ce que vous ne voulez pas faire, mais il faut quand même le noter.

0
dls