Comment fermer correctement une branche de fonctionnalité dans Mercurial?

j'ai fini de travailler sur une branche feature-x . Je veux fusionner les résultats de nouveau à la branche default et fermer feature-x afin de se débarrasser de lui dans la sortie de hg branches .

j'ai proposé le scénario suivant, mais il a quelques problèmes:

$ hg up default
$ hg merge feature-x
$ hg ci -m merge
$ hg up feature-x
$ hg ci -m 'Closed branch feature-x' --close-branch

ainsi la branche feature-x (change 40 - 41 ) est fermée, mais il ya une nouvelle tête , la fermeture les changements de branche 44 , qui seront énumérés dans hg heads chaque fois:

$ hg log ...
o  44 Closed branch feature-x
|
| @  43 merge
|/|
| o  42 Changeset C
| |
o |  41 Changeset 2
| |
o |  40 Changeset 1
|/
o  39 Changeset B
|
o  38 Changeset A
|

Update : il semble que depuis la version 1.5 Mercurial ne montre plus de têtes de branches fermées dans la sortie de hg heads .

est-il possible de fermer une branche fusionnée sans en laisser une autre? Est-il plus correct façon de fermer une branche?

questions connexes:

  • y a-t-il un inconvénient à ce flux de travail mercuriel: nommé branche "dead" head?
235
demandé sur Community 2010-02-10 16:50:29

4 réponses

une façon est de laisser les branches fusionnées ouvertes (et inactives):

$ hg up default
$ hg merge feature-x
$ hg ci -m merge

$ hg heads
    (1 head)

$ hg branches
default    43:...
feature-x  41:...
    (2 branches)

$ hg branches -a
default    43:...
    (1 branch)

une autre façon est de fermer une branche de fonctionnalité avant de fusionner en utilisant un commit supplémentaire:

$ hg up feature-x
$ hg ci -m 'Closed branch feature-x' --close-branch
$ hg up default
$ hg merge feature-x
$ hg ci -m merge

$ hg heads
    (1 head)

$ hg branches
default    43:...
    (1 branch)

le premier est plus simple, mais il laisse une branche ouverte. La seconde ne laisse pas de têtes/branches ouvertes, mais elle nécessite une autre commit auxiliaire. On peut combiner le dernier commit effectif à la branche de fonctionnalité avec ce commit supplémentaire en utilisant --close-branch , mais il faut savoir à l'avance qui commit sera le dernier.

Update : depuis Mercurial 1.5 vous pouvez fermer la branche à tout moment de sorte qu'elle n'apparaîtra plus dans les deux hg branches et hg heads plus. La seule chose qui pourrait éventuellement vous ennuyer est que techniquement le graphique de révision aura toujours une révision de plus sans childen.

Update 2 : Depuis Mercurial 1.8 les signets sont devenus une caractéristique essentielle de Mercurial. Les signets sont plus pratiques pour les branches que les branches nommées. Voir aussi cette question:

215
répondu Andrey Vlasovskikh 2017-05-23 11:54:44

imho il y a deux cas pour les branches qui ont été oubliées de fermer

Case 1: la branche n'a pas été fusionnée dans la valeur par défaut

dans ce cas, je mets à jour vers la branche et je fais un autre commit avec --close-branch, malheureusement cela élit la branche pour devenir la nouvelle pointe et donc avant de la pousser vers d'autres clones, Je m'assure que la pointe Réelle reçoit encore quelques modifications et que d'autres ne soient pas confus au sujet de cette pointe étrange.

hg up myBranch
hg commit --close-branch

Cas 2: la branche a été fusionnée dans la valeur par défaut

ce cas n'est pas très différent du cas 1 et il peut être résolu en reproduisant les étapes pour le cas 1 et deux autres.

dans ce cas, je mets à jour le jeu de modifications de branche, je fais une autre propagation avec --close-branch et je fusionne le nouveau jeu de modifications qui est devenu la pointe dans la valeur par défaut. la dernière opération crée une nouvelle astuce qui est dans la branche par défaut - hourra!

hg up myBranch
hg commit --close-branch
hg up default
hg merge myBranch

Espérons que cela aide les futurs lecteurs.

77
répondu Nachbars Lumpi 2015-12-01 23:23:17

MODIFIER aïe, trop tard... Je sais que lire votre commentaire indiquant que vous voulez garder la fonctionnalité-x changeset autour, de sorte que l'approche de Clonage ici ne fonctionne pas.

je vais encore laisser la réponse ici pour qu'elle puisse aider les autres.

si vous voulez vous débarrasser complètement de" feature X", parce que, par exemple, il n'a pas fonctionné, vous pouvez cloner. C'est une méthode expliquée dans l'article et qu'il fonctionne, et il parle spécifiquement sur les têtes.

autant que je sache, vous avez ceci et vous voulez vous débarrasser de la tête" feature-x "Une fois pour toutes:

@    changeset:   7:00a7f69c8335
|\   tag:         tip
| |  parent:      4:31b6f976956b
| |  parent:      2:0a834fa43688
| |  summary:     merge
| |
| | o  changeset:   5:013a3e954cfd
| |/   summary:     Closed branch feature-x
| |
| o  changeset:   4:31b6f976956b
| |  summary:     Changeset2
| |
| o  changeset:   3:5cb34be9e777
| |  parent:      1:1cc843e7f4b5
| |  summary:     Changeset 1
| |
o |  changeset:   2:0a834fa43688
|/   summary:     Changeset C
|
o  changeset:   1:1cc843e7f4b5
|  summary:     Changeset B
|
o  changeset:   0:a9afb25eaede
   summary:     Changeset A

donc vous faites ceci:

hg clone . ../cleanedrepo --rev 7

et vous aurez ce qui suit, et vous verrez que feature-x est en effet disparu:

@    changeset:   5:00a7f69c8335
|\   tag:         tip
| |  parent:      4:31b6f976956b
| |  parent:      2:0a834fa43688
| |  summary:     merge
| |
| o  changeset:   4:31b6f976956b
| |  summary:     Changeset2
| |
| o  changeset:   3:5cb34be9e777
| |  parent:      1:1cc843e7f4b5
| |  summary:     Changeset 1
| |
o |  changeset:   2:0a834fa43688
|/   summary:     Changeset C
|
o  changeset:   1:1cc843e7f4b5
|  summary:     Changeset B
|
o  changeset:   0:a9afb25eaede
   summary:     Changeset A

j'ai peut-être mal compris ce que vous vouliez mais s'il vous plaît ne modd down, j'ai pris le temps de reproduire votre cas d'utilisation:)

11
répondu SyntaxT3rr0r 2010-02-10 18:13:30

il est étrange que personne n'ait encore suggéré la manière la plus robuste de fermer une branche caractéristique... Vous pouvez juste combiner fusionner avec le drapeau -- close-branch (i.e. commit modified files and close the branch simultaneously):

hg up feature-x
hg merge default
hg ci -m "Merge feature-x and close branch" --close-branch
hg branch default -f

Donc, c'est tout. Pas de tête supplémentaire sur revgraph. Pas d'engagement supplémentaire.

7
répondu tav 2015-03-06 22:19:08