239 votes

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 à l' default de la branche et fermez feature-x afin de se débarrasser de lui à la sortie de l' hg branches.

Je suis venu avec 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

Si l' feature-x de la branche (changests 40-41) est fermée, mais il y a un nouveau chef, la fermeture de la branche de la révision 44, qui seront inscrites en hg heads chaque fois que:

$ 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
|

Mise à jour: Il semble que depuis la version 1.5 Mercurial n'affiche pas les chefs de la fermeture des succursales dans la sortie de l' hg heads plus.

Est-il possible de fermer une fusion de la branche, sans quitter un plus la tête? Est-il plus correct façon de fermer une branche?

Questions connexes:

218voto

Andrey Vlasovskikh Points 6903

Une façon est de simplement laisser fusionné branches ouvrir (ou inactif):

$ 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 avant de fusion en utilisant un supplément de commettre:

$ 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)

La première méthode est plus simple, mais il laisse ouverte la branche. La seconde ne laisse pas ouvrir les chefs/branches, mais il nécessite une auxiliaire de s'engager. On peut combiner le dernier commit de la branche avec ce surplus de valider à l'aide de --close-branch, mais il faut savoir à l'avance qui commit sera le dernier.

Mise à jour: Depuis Mercurial 1.5 vous pouvez fermer la succursale, à tout moment, de sorte qu'il n'apparaît pas dans les deux hg branches et hg heads plus. La seule chose qui pourrait éventuellement vous ennuyer, c'est que, techniquement, le graphe de révision aura toujours une révision de plus, sans enfants.

Mise à jour 2: Depuis Mercurial 1.8 signets sont devenus une caractéristique fondamentale de Mercurial. Les signets sont plus commodes pour ramification que les branches nommées. Voir aussi cette question:

79voto

Nachbars Lumpi Points 946

à mon humble avis il y a deux cas pour les branches qui ont été oublié de le fermer

Cas 1: la branche n'a pas été fusionnés en défaut

dans ce cas, j'ai la mise à jour de la branche et de faire une autre s'engager avec-près-branche, malheureusement, cela élit la direction générale pour devenir le nouveau conseil et, partant, avant de le pousser vers d'autres clones, que j'ai assurez-vous que la véritable astuce reçoit un peu plus de changements et d'autres n'ont pas obtenir confus au sujet de cet étrange conseil.

hg up branch
hg commit --close-branch

Cas 2: branche a été fusionnés en défaut

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

dans ce cas, j'ai la mise à jour de la branche de la révision, de faire un autre commit avec --fermeture de la succursale et de fusionner la nouvelle révision qui est devenu le conseil en défaut. la dernière opération crée une nouvelle astuce qui est dans la branche par défaut - HOURRA!

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

Espérons que cela aide les futurs lecteurs.

11voto

SyntaxT3rr0r Points 10771

EDIT aïe, trop tard... je sais lire votre commentaire en indiquant que vous souhaitez conserver la fonction-x révision de autour de, la logique de clonage ici ne fonctionne pas.

Je vais encore laisser la réponse ici, car il peut aider les autres.

Si vous voulez vous débarrasser complètement de la fonction "X", parce que, par exemple, il ne fonctionne pas, vous pouvez cloner. C'est une méthode expliquée dans l'article et qu'il fonctionne, et il parle spécifiquement sur la tête.

Autant je comprends que vous avez et ce que vous voulez vous débarrasser de la "fonction-x" de la tête 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

Si vous faites cela:

hg clone . ../cleanedrepo --rev 7

Et vous aurez la suite, et vous verrez que la fonction x a 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 tu voulais, mais merci de ne pas le mod vers le bas, j'ai pris le temps de la reproduction de vos cas d'utilisation : )

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