11
votes

Corrections de bugs dans une branche de fonctionnalité

Nous utilisons un Un modèle de ramification GIT réussie par Vincent Driessen pour notre modèle de ramification. Tout va bien mais je n'ai pas vraiment vu un problème particulier élevé.

De ce que j'ai compris, lorsqu'une nouvelle fonctionnalité est requise, vous branche du développement et créez une nouvelle fonctionnalité (code> branche. Vous travaillerez à ce sujet et lorsque vous avez terminé, vous fusionneriez cette succursale dans la branche Développement .

Et si un développeur apporte une fonctionnalité, puis fusionne cette fonctionnalité à Développement Seulement être découvert qu'il existe des bugs dans le code de fonctionnalité. Où devrait-il être corrigé? Si un nouveau correction / BUCKFIX est démarré à partir du développement et le code est fixé là-bas? Je ne peux pas voir une autre façon.

Comment aller à ce sujet?

merci


1 commentaires

Je semble avoir créé un duplicata de votre question, cependant, dans ma question, j'ai pris une approche de la fourniture de commandes à créer un représentant expérimental pour tester les concepts: Stackoverflow.com/questions/32244693/... Voulez-vous vous déranger si j'adressiez votre question avec l'exemple de repo et voyez comment les réponses suggérées seront-elles appliquées sur ce repo et avec quel résultat?


4 Réponses :


1
votes

Si cette branche de fonctionnalité est publique (c'est-à-dire une reproduction à distance clonée / utilisée par d'autres), il est préférable de faire une nouvelle branche et d'isoler le débogage dans ladite branche de fixation.
(au lieu d'essayer de rebaser ' fonction ' 'succursale sur " Développer " branche ").

L'idée reste à ne pas enregistrer directement les commits de débogage intermédiaires dans Développer la succursale , mais pour enregistrer uniquement le commit résultant qui corrigera le bogue introduit par Fonction Branche Fusionner premier endroit.


0 commentaires

0
votes

Il suffit de créer une branche (ou utilisez l'ancien, fusionné fonction branche) et réparez-le là-bas.

L'utilisation de l'ancienne branche / Créer une nouvelle succursale est exactement la même --- Vous ne pouvez pas nommer lequel est lequel après s'est fusionné.


0 commentaires

10
votes

Rappelez-vous qu'un modèle est juste un modèle - il est de vous donner une structure qui vous rend plus efficace, et non pas suivre aveuglément un ensemble de règles. Cela signifie que vous devriez vous sentir libre de modifier les choses et comprendre ce qui fonctionne dans votre situation, car il peut ne pas fonctionner dans toutes les situations.

Je pense que vous avez le choix dans cette situation:

  1. Annulez la fusion et de poursuivre les travaux sur la branche de fonction jusqu'à ce qu'il soit prêt
  2. Démarrer une nouvelle branche pour corriger le bogue.

    Lequel vous choisissez dépend de facteurs tels que:

    • Vos clients peuvent voir le bug? Faire une branche ou bugfix correctif.
    • Le bug vraiment mauvais et arrêter d'autres progrès sur la branche de développement? Faire reculer le changement.
    • Est-ce seulement un problème mineur avec un impact minimal externe? simplement continuer à travailler sur la branche de fonctionnalité et de fusion à nouveau lorsque vous êtes prêt.

      La différence entre une branche de fonctionnalité et la branche bugfix est pas important du point de vue de Git. Il importe que si vous utilisez ces étiquettes pour la documentation interne ou d'autres fins de vérification (par exemple pour garder une trace de ce qui est visible pour les utilisateurs externes).

      Résister à la tentation de travailler directement la branche de développement, même si vous pensez que le bugfix sera très rapide -. Rien n'est jamais tout à fait aussi simple que cela puisse paraître, et vous vous donner un mal de tête plus tard, si quelque chose va mal

      Rugueux représentation visuelle de votre choix:

      diagramme de machine d'état de choix


0 commentaires

5
votes

Que diriez-vous de Trouver le commit Cela a introduit le bogue et crée une nouvelle branche enracinée là-bas ? Avec cette approche:

  • Il n'y a aucun risque de créer des références brisées en raison d'opérations de rebase
  • Juste de l'ascendance de la branche de développement, la branche de fonctionnalité et toute autre succursale pouvant être affectée, vous pouvez indiquer où vous devriez fusionner votre succursale de bugfix une fois que cela est fait. Ceci est vrai même si "fonctionnalité" a fusionné avec "développement" plusieurs fois depuis l'introduction du bogue.
  • Si vous identifiez la commission qui introduisait le bogue et que la racine de là, les développeurs seront capables de dire où ils ont besoin de fusionner la branche de la bugfix, même s'ils ne sont pas familiers avec la mise en page Repo
  • Vous aurez une succursale que vous pouvez fusionner sans crainte de tirer dans des changements ultérieurs non liés. Par exemple, disons que quelqu'un travaille sur "Feature-Beta" qui est une sous-branche de "fonctionnalité" qui a divergé peu de temps après l'introduction du bogue. Ils peuvent facilement tirer dans la branche de la bugfix, sans se soucier de tirer également dans tout ce qui s'est produit sur "Feature".
  • Cette approche réduit la nécessité de choisir Cherry-Chick, qui a l'inconvénient qu'il change le nom des commits (sapant ainsi l'un des grands avantages de GIT, qui applique un nom sans ambiguïté à tout.)

1 commentaires

+1000. Je pense aussi que c'est l'approche la plus souhaitable. Cela conduit à une histoire de validation très claire. De côté opposé, la cueillette de cerisier est l'approche la plus opaque puisqu'elle se cache complètement où le bogue a été introduit et où il a été corrigé. Notez également que Git Bisect aide beaucoup à trouver le COMMIT qui a introduit le bogue. Définitivement une approche hautement suggérée.