web-dev-qa-db-fra.com

Mercurial: Puis-je renommer une branche?

Nous avons maintenant une branche "stigante", où "mise en scène" semble être un bien meilleur ajustement sémantique. Quelle est la bonne stratégie pour gérer cela?

201
KevDog

Mettez à jour la branche stiging et créez-en une nouvelle. Puis fermez l'ancienne branche.

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
217
Elliot Cameron

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

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

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

Note 1: Si la branche stiging inclut des fusions avec d'autres branches, je pense que cela les préservera, tant que staging et stiging ont le même parent. Mais je vérifierais certainement.

Note 2: Comme cela modifie l'historique, l'ancienne branche ne disparaîtra pas simplement des référentiels clonés (voir la documentation rebase.). À moins que tout le monde puisse cloner à nouveau, cela pourrait ne pas être une solution très pratique pour un grand groupe.

Note3/Edit (avec l'aimable autorisation de @JasonRCoombs): Maintenant que les phases sont standard dans Mercurial, rebase refusera de modifier les ensembles de modifications déjà appliqués. Soit le berner en changeant la phase en brouillon (avec hg phases), ou laissez l’ancienne branche rester où elle est, et créez simplement une copie nommée correctement (par exemple, avec `hg rebase --keep ').

58
alexis

Si vous avez des changesets dessus, vous devrez alors utiliser le convert extension avec un branchmap pour le renommer. Tout le monde devra alors cloner le nouveau référentiel ou supprimer l'ancienne branche.

16
tghw

Créez une nouvelle branche appelée "staging" et oubliez l'autre ...

15
lctr30

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

Si stiging est uniquement local, vous pouvez le changer en staging avec une combinaison de greffe et bande . Commencez par mettre à jour le groupe de modifications de l'ancêtre où le stigging avait divergé. Créez la branche de préparation et greffez chaque validation de stiging à staging. La mise en scène devrait maintenant être une copie de stigging. Enfin, détruisez stiging 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 strip {first changeset in stiging}
hg Push --new-branch
4
AWrightIV