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?
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
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.