2011-10-09 2 views
4

Nous avons une équipe de 10 développeurs qui travaille en parallèle pour différentes fonctionnalités, parfois ces fonctionnalités utilisent du code commun parfois non. Et maintenant nous changeons notre processus en branche par caractéristique et il semble que mercurial soit plus approprié pour un tel développement.Flux de production branche par fonction en utilisant Mercurial

Je vois ce processus afin: 1. make branche de sortie (rb) de défaut (tronc) 2. Faire de la branche de fonction (fb) de défaut (tronc)

Quand développeur pense que son dispositif est fait, il peut fusionner fb en rb. Quand il est temps d'aller au QA, nous fusionnons tous les f-b finis en r-b et créons une version pour nos QA.

Questions:

  1. Lorsque QA trouve un développeur de bug devrait modifier son f-b et fusionner à nouveau pour r-b. Cela signifie-t-il que le développeur passe tout simplement à son f-b et commence à corriger le bogue, puis fait de nouveau fusionner f-b à r-b à nouveau?

  2. Lorsque la version est transmise QA va à PROD - comment pouvons-nous geler les changements? "hg tag" est un bon choix mais quelqu'un peut mettre à jour le tag s'il le veut vraiment.

Merci

Répondre

3

Si vous allez fusionner dans les branches de libération spécifiques alors vos branches de fonction doit être branchée sur la branche de sortie, pas sur le tronc. Il est plus simple de fusionner avec la branche parente qu'avec une branche sans parent.

1) Si vous voulez vraiment faire des branches, chaque bogue aurait sa propre branche. Cela aidera à séparer les correctifs des nouvelles fonctionnalités. Après tout, c'est branche par entité et non branche par développeur.

2) L'étiquette Hg est ce que j'ai utilisé. Vous avez raison de dire que quelqu'un change de balise s'il le veut vraiment, mais les balises sont versionnées et vous pouvez installer des hameçons sur le repo principal hg pour lancer des alertes si une balise est déplacée. Je ne m'inquiéterais pas du fait que les tags soient déplacés à moins que vous ne puissiez pas faire confiance à vos développeurs, auquel cas vous êtes foutu.

+0

Nous avons une version hebdomadaire et il est vraiment difficile de savoir si F-b # 1 vient à cette version r- # 1. Et dans ce cas, je veux déplacer f-b # 1 à la prochaine version r- # 2 ou prochaine-prochaine version r- # 3. Dans ce cas, le développeur met juste à jour son f-b # 1 depuis le tronc (après la sortie, nous fusionnons r-b en trunk pour avoir la dernière version stable comme trunk) après r- # 1 et continuons à fonctionner. Je ne sais pas si c'est une bonne décision de la part de VSC, mais il est facile de comprendre pour les développeurs que tout f-b fait du tronc et ils se fichent de la sortie de leur f-b. –

+0

1. Je n'aime pas Branch-per-bug parce que je n'ai pas besoin de cette branche - j'ai besoin d'une fonctionnalité bien faite. Et encore une fois, il est facile de comprendre pour les développeurs et de construire des maîtres à travailler en termes de branche par caractéristique.il est très facile de voir dans JIRA et de voir l'état des problèmes de fonctionnalités et de comprendre que cette fonctionnalité ne peut pas être intégrée dans r-b ou qu'elle le peut. Mais avec le maître de construction de branche-par-bogue devrait trouver toutes les branches connexes. Mais si c'est la meilleure façon pour VSC de gérer l'historique/fusionne/etc alors je n'ai pas le choix –

+0

2. Je vois - Faites confiance mais vérifiez –

2

La réponse à votre première question est «oui». Le meilleur moyen de geler en vue de la publication est d'avoir un clone de version distinct que seul le gestionnaire de publication peut envoyer/déplacer avec les changesets. Ce n'est pas parce que vous utilisez des branches que les clones multiples n'ont pas leur place dans votre flux de travail. Avoir un clone que QA effectue des tests de pré-vol final sur lequel les développeurs ne peuvent pas pousser les changements fait un grand pare-feu.

En outre, pensez à utiliser des signets pour vos branches de fonctionnalité. Puisque, comme vous le savez sûrement, les noms de branches nommées Mercurial ne disparaissent jamais, les signets ressemblant à des git fonctionnent bien pour des concepts vécus comme des fonctionnalités et des bugs.

+0

quels sont les avantages des signets? pour moi les branches nommées sont des choses plus faciles et elles sont toujours stockées dans mercurial. –

+0

Le bénéfice, ou plus exactement, la différence est leur nature éphémère. Ils sont stockés dans le repo, ils peuvent être poussés et tirés, mais ils peuvent également être supprimés. Ils sont surtout comme des "tags qui avancent automatiquement". Beaucoup de gens trouvent les branches nommées frustrantes pour les choses de courte durée puisqu'elles ne peuvent jamais être supprimées. Si avoir 1000 branches ne vous concerne pas (ça ne me dérange pas) alors il n'y a rien de mal avec les branches nommées. –

+0

J'ai besoin de lire les manuels Mercurial plus profondément pour comprendre comment fonctionnent les signets. Et vous pouvez supprimer la branche nommée par "hg commit --close-branche" –

Questions connexes