30 votes

Fusion de succursales

Je suis à essayer de comprendre comment fusionner des branches à partir d'un autre repo dans le courant.

J'ai le texte suivant:

PJT1 - contient des branches par défaut et foodog

PJT2 - contient de la branche par défaut

de PJT2, je ne les suivants:

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

Maintenant, si je regarde dans PJT2, je vois les fichiers corrects et les changements. Cependant, je si je n' hg branches, j'obtiens le suivant:

[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 PJT1 de l' foodog de la branche dans PJT2 de l' default de la branche?

55voto

Ry4an Points 56453

Vous avez besoin de fusionner, mais gardez à l'esprit les modifications sur la branche foodog sera toujours sur foodog -- les branches ne jamais s'en aller, mais ils peuvent être cachés. Cette séquence de commandes est aussi proche que vous obtiendrez 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 sera encore foodog , à moins que vous ne hg branches --active qui ne montre que les branches qui ont des têtes à eux. Après l' commit --close-branch vous ne verrez foodog , à moins que vous ne hg branches --closed.

C'est parce que les branches dans Mercurial ne jamais disparaître entièrement (une caractéristique de conception) qu'ils sont souvent réservés uniquement au long de la vie des choses comme release-1.0 ou stable. À court terme des efforts comme les bugs et fonctionnalités envisager d'utiliser des signets à la place. Voici une comparaison des deux: http://stevelosh.com/blog/2009/08/a-guide-to-branching-in-mercurial

0voto

dls Points 3169

Vous pourriez aussi essayer d'utiliser le rebase extension. Il ressemblerait à quelque chose comme ceci:

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

Le rebase action va abîmer la révision sRev et tous les descendants et appliquer le groupe de modifications à l'ensemble de modifications crdv. 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 crdv serait le défaut de l'ensemble de modifications que vous souhaitez appliquer à.

Enfin, Si vous voulez passer outre et de préserver la source nom de la direction générale, vous pouvez utiliser git rebase option --keepbranches. Vos questions indique que c'est exactement ce que vous ne voulez pas le faire, mais il faut quand même noter.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X