web-dev-qa-db-fra.com

À qui la responsabilité est-elle de fixer des conflits de fusion?

Dis que A travaille sur une succursale basée sur le Master et B fusionnent des changements dans la branche principale, ce qui introduit des conflits de conflits entre une branche et un maître de la région.

À qui la responsabilité est-elle de fixer des conflits de fusion? Je n'ai pas l'intention d'être petite, donc en d'autres termes - est-ce plus productif en général si un correction de ces conflits ou b?

37
daisy

Personne A est celui qui décide quand incorporer de nouvelles changements de maître, donc une personne A effectuera la fusion. Personne A devrait certainement tenter de résoudre les conflits de fusion par eux-mêmes, mais si des questions surviennent, alors la personne A et personne B devrait s'asseoir ensemble et résoudre les conflits ensemble.

N'oubliez pas que vous travaillez dans une équipe. Les coéquipiers devraient s'entraider sans recourir à des doigts ou à dire "c'est ton travail, pas le mien."

Donc, pour répondre à votre question, aucune personne n'est seul responsable de la résolution des conflits de fusion. Vous êtes tous les deux.

129
Greg Burghardt

Pratiquement parlant, c'est une personne A, le propriétaire de la succursale.

En réalité, il y aura des branches C, D, E et F, qui auront maintenant des conflits avec Maître, la personne B ne sera pas en mesure de les réparer.

Cependant, si vous travaillez ensemble, les conflits de conflits devraient être faciles à réparer. Après tout, vous savez quelle personne B tente de faire et auront discuté des changements nécessaires à votre scrum quotidien ou autre. Donc, ce n'est pas une surprise quand ils s'enregistrent et que vous comprendrez pourquoi les conflits ont eu lieu et comment les réparer.

19
Ewan

En général, la personne qui se jette dans le conflit a aussi de le résoudre, après tout c'est la personne qui veut que la fusion se produise et la résolution du conflit est nécessaire pour y arriver.

Dans votre échantillon qui serait la personne A. Il personne de A qui veut son code dans la branche principale. Ce n'est pas personne B qui veut que le code là. Personne B vient de faire des changements à la branche et apparemment, ils ne sont pas en conflit ou s'ils l'ont fait, il a résolu le conflit. Supposons que personne B avait été beaucoup plus rapide en ajoutant ses changements, la personne A aurait dû traiter avec eux déjà sur sa branche de fonction, ne serait-il? Eh bien, maintenant personne A a faire affaire avec eux par la suite, ce qui devrait être juste un peu de travail supplémentaire.

S'il est beaucoup de travail supplémentaire que le conflit est énorme, quelque chose a mal tourné complètement. Par exemple. si deux personnes mis en œuvre la même fonction ou contredisant les caractéristiques ou une personne travaille sur une fonctionnalité tandis qu'un autre complètement restructuré le projet, il y avait un déficit planante/gestion dans la préparation de ces deux changements de code.

Dans ce cas, vous devez discuter si la résolution de ce conflit est encore significatif du tout. Parfois, il est tout simplement plus logique de se défausser d'une des deux modifications complètement (que l'on a à discuter) et refaire le travail sur la nouvelle base de code, car la résolution du conflit serait au moins une quantité égale de travail. Parfois, un autre changement peut même faire une fonctionnalité obsolète ou l'obliger à travailler de manière complètement différente car il a été conçu. Dans ce cas, la fusion seule ne vous mènera nulle part, que vous aurez toujours à faire une énorme quantité d'adoptions supplémentaires après la fusion et ceux-ci seul peut égaler le travail de re-mettre en œuvre cette fonctionnalité sur la nouvelle base de code à partir de zéro.

En tant que conseil général de développement:
Si vous avez une branche de long métrage en cours d'exécution, gardez la fusion de la branche principale dans cette branche de fonction sur une base régulière. Cela empêche les deux branches de développement trop éloignées et rend beaucoup plus facile la fusion finale. Aussi, vous verrez rapidement s'il y a quelque chose se passe sur la branche principale qui sera en conflit avec la manière dont vous avez l'intention de mettre en œuvre cette fonctionnalité. Il est alors à vous d'arrêter les gens qui en désordre avec la branche principale et discuter de la façon de procéder à cette situation, ou simplement adopter votre stratégie de mise en œuvre de leurs changements.

Un exemple pour le cas plus tard: vous avez prévu de faire synchrone, ils font actuellement tout asynchrone sur la branche principale, alors vous devriez également mettre en œuvre cette fonctionnalité suivante de manière asynchrone le même modèle qu'ils utilisent. En fusionnant leurs changements dans votre branche de fonction, vous pouvez même avoir des nouvelles méthodes utiles disponibles qui ont ajouté à la branche principale et qui le rend beaucoup plus facile pour vous de mettre en œuvre dès maintenant votre fonction prévue de façon asynchrone. Si vous venez concentré sur la branche de fonction, votre fonction sera fait un jour et il sera synchrone, alors vous essayez de fusionner, juste pour savoir, que tout dans le projet a changé et même si vous pouvez résoudre cette fusion conflit, il ne vous acheter beaucoup que vous devrez toujours faire de votre fonction asynchrone maintenant et peut ainsi être égale à réécrire à partir de zéro.

11
Mecki

Dans la plupart des processus de développement qui ont une branche "maître", il incombe à quiconque apporte des modifications à faire les funales requises.

La branche "Master" est une succursale privilégiée dans le sens où il s'agit de la "meilleure version" actuelle du logiciel. Une fois que les modifications sont fusionnées, il y a une attente qu'ils seront préservés, car ils sont maintenant la meilleure version actuelle.

Cela ne veut pas dire qu'il n'y a jamais de cas où "premier passé le post" est faux. J'ai vu des situations où les changements de A sont une priorité plus élevée que B, ce qui signifie qu'ils fournissent plus de valeur dans un sens des affaires. Dans cette situation, B n'était tout simplement pas autorisé à appliquer leurs modifications à maîtriser avant après un (rendant la responsabilité de la tâche de faire la fusion). Cela s'est produit parce que les changements de A ont affecté un dossier hautement contraint et ont été jugés essentiels à une libération qui se posait. Mais vous notez, B n'a pas validé leurs modifications à maîtriser, puis à fusionner les changements de A. B a été interdit à mettre leurs changements sur le maître jusqu'à ce qu'une chance.

Il y a des raisons pragmatiques à cela, bien sûr. Il n'est souvent pas raisonnable d'identifier tous les changements potentiels "plus importants" étant effectués sur différentes branches. Cela produirait beaucoup d'incertitude quant à ce que les changements de B étaient "complètes" et que l'incertitude n'est pas souhaitable dans les environnements de développement modernes.

Ceci étant dit, j'ai effectivement travaillé sur des projets où la réponse est que la personne C est responsable de la fusion, où c était le gestionnaire de construction. Pas que je pense qu'il devrait y avoir un gestionnaire de construction qui résout des problèmes comme ceux-ci, Mais il montre que "qui est responsable" est très dépendant de la façon dont vous développez.

4
Cort Ammon

C'est la responsabilité de la personne qui veut fusionner.

De toute évidence, tout changement qui aurait causé des conflits aurait été examiné avant d'être fusionné et si un changement a provoqué un nombre déraisonnable de conflits, il aurait été rejeté.

Évidemment, un ne se fusionne pas dans la branche principale puis des conflits résolus. Un fusionne la branche principale dans sa branche de développement, résout les conflits et s'assure que sa branche fonctionne. À ce stade, A a une succursale qui peut être fusionnée sans conflits dans la branche principale. Le code résultant est examiné puis fusionné. S'il s'agit d'un changement complexe où l'examen prend longtemps et que le risque de nouveaux conflits apparaissant, a peut-être demander à ses collègues de conserver des changements fusionnant jusqu'à ce que la fusion d'une fusion est terminée.

3
gnasher729

Si la branche "A" et "MASTER" ont des conflits, fusionnez "Master" dans "A" avant d'ouvrir la demande de traction.

De cette façon, le processus d'examen n'est pas démarré inutilement tôt et vous pouvez clairement voir et discuter de tous les changements que "A" introduiraient, qu'ils découlent de la résolution des conflits de fusion ou du développement des caractéristiques.

2
knallfrosch