Fermeture des succursales Hg

103

Lorsque vous l'utilisez hg branch FeatureBranchNameet le publiez dans un référentiel central partagé entre les développeurs, existe-t-il un moyen de le fermer FeatureBranchNamelorsque son développement a officiellement été fusionné avec la branche par défaut?

Il serait également utile si le FeatureBranchNamen'était pas visible lors de l'exécution d'une hg branchescommande.

Nate
la source

Réponses:

158
hg commit --close-branch

devrait être suffisant pour marquer une branche fermée. (voir hg commit)

--close-branch

marquer une branche comme fermée, en la masquant de la liste des branches.

Voir aussi ce fil :

Je m'attends à ce que je ferme une succursale parce que cette ligne de développement est dans une impasse, et je ne veux plus m'en soucier.
Par conséquent, lorsqu'une branche a été fermée, je ne devrais pas la voir (dans les branches, les têtes, le journal, par exemple) à moins que je ne demande explicitement à voir les branches fermées.

Je dois noter que je m'attends à ce qu'une branche fermée reste dans le référentiel; cela peut être utile à l'avenir, et le commit --close-branchmessage devrait au moins expliquer pourquoi la succursale a été fermée.
L'élagage des branches est une tout autre chose.


Remarque: cette activité de "fermeture de succursale" est un aspect considéré comme manquant dans Git, par rapport à Mercurial :

Les branches dans git sont, nous dit-on toujours, des choses éphémères à utiliser et à jeter, et pour autant que je sache, git n'a pas le moyen d'indiquer à vos collègues que vous avez terminé avec une branche;
le seul moyen de le faire est de le supprimer, ou d'espérer qu'ils voient le commit de fusion final et comprennent que la branche est fermée à tout développement ultérieur.

[Dans Mercurial] Lorsque vous avez terminé avec une branche, cependant, vous ne pouvez pas la supprimer du référentiel; à la place, vous émettez un commit qui ferme la branche et Mercurial note que la branche est fermée. Cela restera une partie permanente de l'historique de votre référentiel.

VonC
la source
3
Existe-t-il un moyen de fermer une succursale non actuelle?
Thomas S.
@ThomasS. 5 ans plus tard, je ne sais pas avec certitude. La documentation a été récemment mise à jour: mercurial.808500.n3.nabble.com/…
VonC
1
@ThomasS. oui, cette réponse m'a aidé avec ce problème. hg debugsetparent <revision> hg branch <branchOfRevision> Notez que l'ordre est important. Cela fera penser à votre dépôt qu'il est sur la nouvelle révision, tandis que tous vos fichiers proviennent de la version initiale. Après cela, vous pouvez utiliser le commit --close-branch, mais utilisez l'option -X * pour faire un commit vide. hg commit --close-branch -X * -m "Closing branch."
Maske
8

J'ai écrit un script simple qui complète la fermeture de la branche, les commandes trouvées sur PruningDeadBranches .

## Script ##

#!/bin/bash
#script to close the not required branch in mercurial

hg up -C $1
if [ $? -eq 0 ]; then
    echo "$1 is up"
else
    echo "branch not found, please recheck your argument"
    exit 1
fi 
# if we are here then the branch is up, so we do the following
hg commit --close-branch -m 'this branch no longer required' 
echo "$1 is closed"
hg up -C default
echo "default is up" 

Comment

Accédez à la copie locale du référentiel et exécutez ce script en donnant un argument. Par exemple:

$./the_script_above.sh bad_branch_name_to_close

Qu'est ce que ça fait

Cela fait ce qui suit:

  1. Si la branche existe, elle est mise à jour vers la branche donnée ou existe avec un message d'erreur.
  2. Il ferme la succursale.
  3. Mises à jour de la branche par défaut.
  4. S'arrête.
Roshan Poudyal
la source
Le script ne gère pas les branches avec des espaces dans le nom.
Jared
@Jared pouvez-vous exécuter une commande up indépendante avec votre branche. Pour exemple: $ hg update yourbranchnamecontainingspace. Je pense que nous pourrions créer un nom de branche avec un espace, mais vous obtenez une erreur d'analyse lorsque vous exécutez des commandes mercurial telles que update . Vous voudrez peut-être envisager d'échapper le caractère espace tout en passant le nom de la branche en tant que paramètre au script. À votre santé.
Roshan Poudyal
n'est pas echo "$1 is up"dupliqué ici? Dans thenet après fi? En outre, un tel script pourrait être utile s'il prend en charge une option permettant de fusionner à la fois par défaut
YakovL
1
@YakovL oui =). Merci pour la notification. J'ai mis à jour le script. Bien sûr, cela serait utile pour la fusion facultative, je vais essayer de mettre à jour à l'avenir mais d'ici là, vous pouvez mettre à l'échelle le script à votre goût =)
Roshan Poudyal