2010-10-20 3 views
15

je me retrouve à faire ce qui suit beaucoup:Hg message de validation post-fusion, meilleure pratique?

C:\Code>hg pull 
pulling from http://server/FogBugz/kiln/Repo/Project/Rebuild/trunk 
searching for changes 
adding changesets 
adding manifests 
adding file changes 
added 2 changesets with 4 changes to 4 files (+1 heads) 
(run 'hg heads' to see heads, 'hg merge' to merge) 

C:\Code>hg merge 
4 files updated, 0 files merged, 0 files removed, 0 files unresolved 
(branch merge, dont forget to commit) 

C:\Code>hg commit -m "Merged" 

C:\Code>hg push 
pushing to http://server/FogBugz/kiln/Repo/Project/Rebuild/trunk 
searching for changes 
remote: kiln: successfully pushed 2 changesets 

Ma question est, ce qui est mieux/plus utile d'utiliser le message de validation après la fusion d'une traction à partir du référentiel. Y a-t-il des meilleures pratiques que les gens utilisent dans les systèmes de contrôle de version distribués pour ce genre de chose?

+0

On dirait que ce que je fais .... Devinez qui fait deux d'entre nous (et tous les gars avec qui je travaille aussi!) Peut-être ne pas faire de bonnes pratiques ... – jcolebrand

+0

IMHO ces messages de fusion (et commits) sont un défaut de hg. Dans subversion vous avez les messages de log des commits précédents, alors svn up fait une fusion automatique alors vous ne pouvez valider que * vos * changements avec bien sûr le bon message de journal. Je voudrais dans une prochaine version de hg avoir non seulement des messages de validation de fusion vides, mais aussi aucun événement du tout dans le scénario pour cela! Devrions-nous toujours utiliser "hg pull --rebase" comme suggéré? Ai-je manqué quelque chose? veuillez me diriger vers une explication .. ;-). Cheers –

Répondre

9

Si vous utilisez le fetch extension, il automatise le tirage, fusionne le pas en une seule étape, va chercher. Le message qu'il génère automatiquement est quelque chose du genre "fusion automatique". Les développeurs de hg semblent penser que c'est raisonnable car l'extension est maintenant distribuée avec la base.

Les messages de fusion ne semblent pas contenir une quantité d'informations particulièrement élevée. Votre message semble raisonnable.

[[offtopic, nous les utilisons parfois l'occasion d'un jeu de mots sur le mot fusion]]

+0

Parfait, en fait, je l'avais déjà installé et je ne le savais même pas! Merci! – automagic

+1

L'extension d'extraction encombre votre historique avec des messages de fusion sans signification. Juste quelque chose à considérer. –

+2

Juste pour insérer une raison derrière mon downvote: Je pense que la suggestion de pyfunc qu'ils donnent un "pourquoi" est vraiment une meilleure idée. Le mien a tendance à être des choses comme «amener le bugfix # de la branche de production» ou «tirer dans la nouvelle fonctionnalité de Jim Y». L'extension d'extraction est fournie avec mercurial, mais elle est désactivée par défaut et pour une bonne raison. –

6

Il n'y a pas de solution unique, voici ce que j'ai essayé de faire.

messages: Lors de la validation

rappelez-vous que ces jus messages sont les seules chaînes qui vous connecter à quelqu'un qui est d'essayer de déchiffrer les raisons de l'engagement. La clé est de fournir une description qui va être un commentaire utile sur le développement de code. Donc, quand quelqu'un utilise hg log, il a un bon commentaire sur la façon dont le logiciel est développé.

Quelques bonnes pratiques:

Lien avec votre système de gestion de bug:

  1. fixe # 3456, nouvelle fonctionnalité # 2435 etc
  2. ou plus descriptif une des modifications qu'elle apporte dans le repo
  3. Donner des credits

En fait, ce que je fais surtout c'est. Regardez l'état actuel de "hg log" et voir quel message utile signifierait une progression logique dans la compréhension de la dernière validation.

+0

bonne astuce sur le journal, n'avait pas pensé à cela – automagic

+0

Merci pour votre réponse. Nous suivons une pratique très similaire et cela fonctionne très bien. J'essaie de baser mes propres messages sur des cas où j'ai dû parcourir l'histoire. Généralement, les messages qui énoncent le but principal du commit sont ce que je trouve le plus utile. Des détails supplémentaires au-delà de cela peuvent en fait gêner. – DaveInCaz

1

Vous pouvez utiliser l'extension de rebasage, donc hg pull --rebase serait rebasage votre repo à la pointe du repo central. Cela annule le besoin de fusion après une traction.

j'ai ajouté un alias pour elle:

[alias] 
pure = pull -u --rebase 

fonctionne bien pour nous.

Plus de détails sont à la page RebaseProject.

+1

Notez que cela a le même effet que 'svn update', ce qui signifie que vous êtes toujours en train de fusionner du code, c'est juste fait en arrière-plan et sans filet de sécurité. Si la fusion échoue en raison de conflits, vous ne pouvez pas simplement revenir en arrière et réessayer, vous devez extraire les modifications des fichiers .rej. Il combine également vos modifications avec la fusion, de sorte que certains des changements que vous noterez seront aussi les changements d'autres personnes fusionnées. TL; DR N'ayez pas peur de fusionner, c'est plus sûr. – tghw

+0

Il n'utilise pas de fichiers .rej. Il enregistre le bundle dans le dossier .hg, que vous pouvez dégrouper si votre opération va vers le sud. J'ai mis à jour mon message avec un lien vers RebaseProject, qui fournit plus de détails. L'analogue de 'svn update' est' hg pull -u'. Jetez un oeil à http://stackoverflow.com/questions/2354527/is-hg-pull-rebase-analogous-to-svn-update. N'ayez pas peur d'essayer quelque chose de différent. –

0

Pour les fusions banales, où vous ne travaillez qu'avec un référentiel, je pense que "fusionner" suffit. Habituellement, vous ne savez même pas tout ce qui a été fusionné, car ce sont les changements de tous les autres.

La seule fois où je suggérerais d'être plus verbeux serait lorsque vous travaillez avec plus d'un dépôt. Si vous avez un devel repo et un repo stable, et que vous récupérez des corrections de bogues dans stable, je mentionnerais simplement cela dans la fusion: "fusionner avec stable". Ces fusions ont tendance à être plus grandes, donc cela aide à les expliquer aux gens qui arrivent plus tard.

+0

Merci pour votre réponse.Dans le même ordre d'idée, la bonne chose à propos de l'extension d'extraction mentionnée ci-dessus est qu'elle fait exactement cela - vous dit exactement quel repo vous avez tiré et fusionné. – automagic

1

Vous pouvez collecter toutes les engager nouvellement ajoutés changesets' messages dans un fichier par

$ hg log --rev 'reverse(p2():ancestor(p1(),p2())-ancestor(p1(),p2()))' \ 
     --template '{desc}\n' \ 
     > commit-message.txt 

puis modifier manuellement commit-message.txt, et enfin l'utiliser comme le message du journal:

$ hg commit -l commit-message.txt 
2

Tant que "Merg" est dans le message d'une manière ou d'une autre, nous nous sommes amusés à utiliser l'opportunité de remplir nos logs de mercure avec hilarité. Par exemple, nous avons utilisé des messages de fusion tels que «les prêts de fusion immobilière sont à un bas absolu» ou «une production télévisuelle de Merge Griffin».

+0

voir @mergemessage pour un exemple – gabe

Questions connexes