Question

Je suis dans une petite équipe distribuée en utilisant Mercurial pour un dépôt central. Nous chaque clone via ssh sur nos propres boîtes de Linux. Notre intention est d'examiner le travail de chacun avant de pousser des changements jusqu'au dépôt central, pour aider à garder la pointe propre du centre. Qu'est-ce qu'un bon moyen de code share entre les développeurs sur différentes boîtes de Linux? Je suis nouveau à Mercurial. Les options que je peux penser (par la lecture, pas d'expérience) sont:

1: Auteur engage toutes les modifications et mises à jour locales clone travail avec la pointe du centre. Auteur utilise bundle hg, s'il y a un moyen de spécifier quels régimes locaux à inclure dans le paquet. (Une expérience m'a montré « bundle » attrape seulement des changements UNCOMMITED, même s'il y a des précédents commits locales qui ne connaît pas central) Auteur obtient fichier bundle à l'évaluateur. Réviseur crée un nouveau clone propre de la pointe du centre, et les importations du faisceau dans ce clone. ou,

2: Une fois à la fois auteur et critique rapportez de pointe du centre, patch utilisations de l'auteur et les importations du patch examinateur. ou,

3: pousse Auteur de réviseur ou réviseur tractions de l'auteur (mais comment, exactement ce que je lis est seulement pousser et tirer vers / à partir du référentiel servi d'origine, et / ou sur la même case au lieu d'entre les différentes boîtes de Linux? .)

4: Oublier révision du code avant de pousser au centre; aller de l'avant et pousser, en utilisant des balises pour identifier ce qui a été examiné ou non, et l'utilisation d'Hudson (fonctionne déjà) pour marquer la dernière version en toute sécurité afin que les membres de l'équipe peuvent savoir que l'on à tirer de.

Si votre équipe utilise Mercurial et fait des revues de code, comment vous obtenez l'examinateur pour voir vos modifications?

Était-ce utile?

La solution

La plupart sont possibles, certains sont plus fastidieux que d'autres.

  1. Vous pouvez utiliser bundle en spécifiant le bout du repo central du --base:
    hg bundle --base 4a3b2c1d review.bundle
  2. peut aussi bien utiliser tout paquet. De cette façon, les données de changeset est également inclus.
  3. Vous pouvez pousser (et tirer) à (de) tout dépôt qui a un ancêtre commun (s). Si vous voulez tirer d'un de vos collègues, ils ont juste besoin de courir hg serve sur leur machine, et vous serez en mesure de tirer.
  4. Cela fonctionne aussi, mais vous devrez gérer plusieurs têtes et faire attention à la fusion. Si vous ne le faites pas, il peut devenir facile de fonder un changement stable au-dessus d'un changeset unreviewed, ce qui rendra difficile à réparer si vous devez résoudre ce problème unreviewed changeset plus tard.

Parmi les options présentées, # 1 et # 3 sont probablement plus facile, juste en fonction de si oui ou non, vous pouvez rejoindre les uns les autres boîtes de.

Sur une note connexe: Telle est la question qui a obtenu mon collègue et moi avons commencé à développer Kiln , notre (Fog Creek de ) hébergement Mercurial et outil de révision du code. Notre plan, et le prototype initial, garderait plusieurs référentiels, autour d'un référentiel « central », et un grand nombre de référentiels « d'examen ». Le processus d'examen serait commencé en clonant le repo central dans une prise en pension d'examen sur le serveur, puis l'exécution d'un diff repo complète entre les deux, avec une interface web simple pour obtenir et visualiser les diffs.

Nous avons évolué ce flux de travail tout à fait un peu, mais l'idée générale, ayant une prise en pension de branche pour pousser les modifications non examinées à et une interface pour les examiner avant de les pousser dans le repo central, est toujours le même. Je ne veux pas faire de la publicité, mais je recommande lui donner un essai .

Autres conseils

La moitié réponse à cette question utilise Reviewboard avec Mercurial extention. Il permet de pousser certaines révisions aux fins d'examen en exécutant la commande suivante

  

hg pointe de postreview

Je vais ajouter une 5ème choix - faire tous les travaux de développement sur les branches nommées, de préférence par tâche. Laisser quoi que ce soit à engager à un « développement » branche nommée, que ce soit en état de fonctionnement ou non.

Push au dépôt central, ont tirer la branche critique. Procéder à l'examen de la branche.

Une fois l'examen passé, fusionner les travaux de développement dans la branche de fonction appropriée.

Ce flux de travail, qui est (pour moi) étonnamment impopulaire, présente de nombreux avantages:

  1. Tous les travaux s'engage -. Vous ne devez pas attendre une révision à faire avant de vous engager

  2. Vous ne construirez pas de la mauvaise version. Vous ne construisez jamais de la branche de fonction.

  3. Travaux en cours ne pas interférer avec d'autres développeurs.

  4. De la branche de développement, vous pouvez consulter les dernières modifications (par exemple les changesets portant sur les commentaires d'examen), comparez avec le point de branchement, ou comparer avec la dernière branche de fonction - qui peut donner des informations utiles.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top