Comment fermer correctement une twig dans Mercurial?

J’ai fini de travailler sur une fonctionnalité de twig feature-x . Je veux fusionner les résultats dans la twig default et fermer l’ feature-x pour le supprimer dans la sortie des hg twigs .

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 

Ainsi, la twig feature-x (changests 4041 ) est fermée, mais il y a une nouvelle tête , le changeset de twig de fermeture 44 , qui sera répertorié à chaque fois dans hg heads :

 $ 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 ne montre plus les têtes de twigs fermées dans la sortie des hg heads de hg heads .

Est-il possible de fermer une succursale fusionnée sans laisser une tête de plus? Existe-t-il un moyen plus correct de fermer une twig de fonctionnalités?

Questions connexes:

  • Y a-t-il un inconvénient à ce workflow Mercurial: la twig nommée “tête morte”?

L’une des méthodes consiste à laisser les twigs fusionnées ouvertes (et inactives) ouvertes:

 $ hg up default $ hg merge feature-x $ hg ci -m merge $ hg heads (1 head) $ hg twigs default 43:... feature-x 41:... (2 twigs) $ hg twigs -a default 43:... (1 branch) 

Une autre manière consiste à fermer une twig d’entités 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 twigs default 43:... (1 branch) 

Le premier est plus simple, mais laisse une twig ouverte. Le second ne laisse aucune tête ouverte / twig, mais nécessite un engagement supplémentaire. On peut combiner le dernier commit à la twig avec ce commit supplémentaire en utilisant --close-branch , mais il faut savoir à l’avance quel sera le dernier commit.

Mise à jour : Depuis Mercurial 1.5, vous pouvez fermer la twig à tout moment afin qu’elle n’apparaisse plus dans les hg twigs hg heads et hg heads . La seule chose qui pourrait vous ennuyer est que techniquement, le graphique de révision aura encore une révision de plus sans childen.

Mise à jour 2 : Depuis les Mercurial 1.8, les signets sont devenus une caractéristique essentielle de Mercurial. Les signets sont plus pratiques pour les twigments que les twigs nommées. Voir aussi cette question:

  • Mercurial twigments et signets

à mon humble avis, il y a deux cas pour les twigs qui ont été oubliées de fermer

Cas 1: la twig n’a pas été fusionnée en défaut

dans ce cas, je mets à jour la twig et effectue un autre commit avec –close-branch. Malheureusement, cela choisit la twig pour qu’elle devienne la nouvelle astuce et par conséquent, avant de l’envoyer aux autres clones, je m’assure que ne soyez pas confus à propos de cette astuce étrange.

 hg up myBranch hg commit --close-branch 

Cas 2: la twig a été fusionnée en défaut

Ce cas n’est pas très différent du cas 1 et 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 twig, effectue un autre commit avec –close-branch et fusionne le nouveau jeu de modifications qui est devenu le conseil par défaut. la dernière opération crée un nouveau conseil qui se trouve dans la twig par défaut – HOORAY!

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

J’espère que cela aidera les futurs lecteurs.

EDITER ouch, trop tard … Je sais que tu as lu ton commentaire en déclarant que tu veux garder le changement d’entité-x autour, donc l’approche de clonage ici ne fonctionne pas.

Je vais quand même laisser la réponse ici car cela peut aider les autres.

Si vous voulez vous débarrasser complètement de “feature X”, parce que, par exemple, cela ne fonctionnait pas, vous pouvez cloner. C’est l’une des méthodes expliquées dans l’article et cela fonctionne, et il parle spécifiquement des têtes.

Si j’ai bien compris, vous avez ceci et vous voulez vous débarrasser définitivement de la tête “feature-x”:

 @ 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 tu fais ça:

 hg clone . ../cleanedrepo --rev 7 

Et vous aurez ce qui suit, et vous verrez que feature-x a bel et bien 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 veuillez ne pas moduler, j’ai pris le temps de reproduire votre cas d’utilisation:)

Il est étrange que personne n’ait encore suggéré le moyen le plus robuste de fermer une twig de fonctionnalité … Vous pouvez simplement combiner la validation de fusion avec l’option –close-branch flag (c’est-à-dire valider les fichiers modifiés et fermer la twig simultanément):

 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 le revgraph. Aucun engagement supplémentaire.