web-dev-qa-db-fra.com

Comment seulement pousser vers une branche en Hg?

J'ai un dépôt Hg avec 3 branches, mais deux d'entre elles sont inactives (car je les ai déjà fusionnées dans ma branche par défaut). têtes hg affiche 3 têtes, une pour chaque branche, même si branches hg montre 2 de ces branches comme 'inactives'.

Lorsque j'essaie de pousser ma branche par défaut (en utilisant hg Push --branch default http: // ...) vers un autre référentiel, la fusion est abandonnée avec le message "abort: Push crée de nouvelles branches distantes :! "

À partir des pages de manuel Hg Push, "Par défaut, Push ne permettra pas la création de nouvelles têtes à la destination, car plusieurs têtes ne permettraient pas de savoir quelle tête utiliser. Dans cette situation, il est recommandé de tirer et de fusionner avant de pousser."

Je l'ai déjà fait, mais je ne peux toujours pas pousser --branch par défaut sans qu'il soit abandonné.

Toute aide est appréciée. Merci!

53
simon

Si les ensembles de modifications sur default ont des ensembles de modifications ancêtres sur d'autres branches, vous devez également les pousser. Il n'est pas possible qu'un changeset existe dans un référentiel sans que tous ses changesets existent également.

Alors essayez:

hg Push --branch default --new-branch

qui dit "ouais, je sais que ce Push envoie à travers un nom de branche que le dépôt distant n'a jamais vu auparavant" (il nécessite également Mercurial 1.6 ou IIRC plus tard)>

Vous pouvez également prendre ces têtes inactives et les rendre fermées avec:

hg update thebranch
hg commit --close-branch -m 'closing'

Parce que "les branches nommées sont éternelles", de nombreuses personnes choisissent de les réserver pour des concepts de longue durée comme "stables" et "expérimentaux" et utilisent des signets, des branches anonymes ou des clones pour les fonctionnalités, les versions et d'autres choses transitoires. Voir ceci pour un guide sur ces autres options.

58
Ry4an Brase

Pour pousser une seule branche, vous utilisez simplement -b

hg Push -b myBranch

en ce qui concerne le problème spécifique, vous voudrez peut-être examiner la fermeture des succursales. Je sais que SourceTree le propose, mais je ne suis pas sûr des détails

33

Vous pouvez le FORCER!

Voici comment:

1. Pull from your repository
2. hg Push --rev nnn -f (replace nnn with your Rev # of your working branch)
3. do NOT force before PULLing. if you do things will get out sync and you are screwed

Si vous utilisez quelque chose comme RhodeCode, vérifiez-le après l'avoir forcé et vous verrez que votre dernière branche est là.

Cependant, je pense que plus tard Mercurial va vous demander de pousser à nouveau l'autre branche, même si vous la fermez, Mercurial essaiera de créer cette branche sur un serveur.

Je suis également un utilisateur de Git et j'ai rencontré la même situation car un client utilise Mercurial mais j'aimerais utiliser le style de flux de travail Git.

Je pense que c'est faisable mais je n'ai pas encore compris à 100%.

1
Gilson