Mercurial: Puis-je renommer une twig?

Nous avons maintenant une twig “stiging”, où “staging” semble être un ajustement sémantique bien meilleur. Quelle est la bonne stratégie pour gérer cela?

Mettre à jour vers la twig de stiging et en créer une nouvelle. Puis fermez l’ancienne twig.

En résumé:

 hg update stiging hg branch staging hg commit -m"Changing stiging branch to staging." hg update stiging hg commit --close-branch -m"This was a typo; use staging instead." hg push --new-branch 

Pour les futurs lecteurs: avec l’extension rebase , vous pouvez créer une nouvelle twig avec le même parent que stiging et y déplacer l’historique complet de la twig, comme ceci:

 hg update -r "parents(min(branch('stiging')))" hg branch staging hg commit hg rebase --source "min(branch('stiging'))" --dest staging 

Cela suppose que la stiging n’a qu’un seul parent. Bien sûr, vous pouvez simplement utiliser des numéros de révision explicites à la place.

Note 1: Si le stiging twig inclut des fusions avec d’autres twigs, je pense que cela les conservera, à condition que le staging et le stiging aient le même parent. Mais je vérifierais certainement.

Note 2: comme cela modifie l’historique, l’ancienne twig ne disparaîtra pas simplement des référentiels clonés (voir la documentation de rebase ). À moins que tout le monde ne puisse cloner de nouveau, ce ne serait peut-être pas une solution très pratique pour un grand groupe.

Note3 / Edit (avec la permission de @JasonRCoombs): Maintenant que les phases sont standard dans mercurial, rebase refuse de modifier les modifications déjà effectuées. Soit le tromper en changeant la phase en brouillon (avec des hg phases ), soit laisser l’ancienne twig restr là où elle est et créer une copie correctement nommée (par exemple, avec hg rebase –keep).

Si vous avez des modifications, vous devrez utiliser l’ extension de conversion avec un branchmap pour le renommer. Tout le monde devra ensuite cloner le nouveau repo ou retirer l’ancienne twig.

Faire une nouvelle twig appelée “staging” et oublier l’autre …

Cela modifie l’historique et ne concerne que les utilisateurs avancés de Mercurial. Ne faites pas cela si vous ne savez pas ce que cela signifie.

Si la cicasortingsation est locale seulement, vous pouvez la transformer en mise en scène avec une combinaison de greffe et de bandelette . Commencez par mettre à jour le jeu de modifications ancêtre où les stigings ont divergé. Créez la twig de transfert et effectuez une greffe de chaque stiging à la staging. La mise en scène doit maintenant être une copie de stiging. Enfin, détruisez les stigmates en supprimant son premier commit.

 hg update {SHA-1 of the ancestor changeset} hg branch staging hg graft {first changeset in stiging} ... {stiging head-1} {stiging head} hg ssortingp {first changeset in stiging} hg push --new-branch