2011-03-03 3 views
30

J'essaie de comprendre comment fusionner des branches d'un dépôt séparé dans le courant.Fusion de branches Mercurial à partir de référentiels distincts

Je donne les résultats suivants:

PJT1 - contient des 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 bons fichiers et les changements. Cependant, je si je fais hg branches, je reçois le texte suivant:

[[email protected] pjt2]$ hg branches 
foodog       1:c1e14fde816b 
default      0:7b1adb938f71 (inactive) 

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

[[email protected] pjt2]$ hg branch 
foodog 

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

Répondre

55

Vous devez fusionner, mais gardez à l'esprit les changements sur la branche foodog sera toujours sur foodog - les branches ne disparaissent jamais mais elles peuvent être cachées. Cette séquence de commandes est aussi proche que vous aurez à ce que vous 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 montrera toujours foodog à moins que vous ne hg branches --active qui montre que les branches qui ont la tête sur eux. Après le commit --close-branch vous ne verrez pas foodog sauf si vous 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 pour des choses à vie comme release-1.0 ou stable. Pour les efforts de courte durée, tels que les bogues et les fonctionnalités, pensez plutôt à utiliser des signets. Voici une excellente comparaison des deux: http://stevelosh.com/blog/2009/08/a-guide-to-branching-in-mercurial

0

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

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

L'action rebasage sera detatch changeset SREV et tous les descendants et appliquer le groupe de changements à changeset CRDV. Par défaut, les modifications seront appliquées à la branche par défaut. Donc, dans votre cas, SREV serait la première sur la branche changeset foodog et CRDV serait le défaut vous voulez changeset 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.

Questions connexes