Dire plusieurs branches sont en cours d' élaboration, A
et B
, ainsi qu'une branche « correction d' un bug » supplémentaire C
.
Maintenant, C
c'est déjà "fini" et fusionné en maître. A
et B
sont toujours en développement et ne seront pas corrigés avant (peut-être) qu'une autre branche de correctif de bogue ne soit fusionnée dans le maître.
Est-ce une bonne idée de fusionner le C
plus rapidement possible dans les nouvelles branches de fonctionnalités? Pour que les nouvelles fonctionnalités restent aussi proches master
que possible? Ou est-il préférable de laisser la nouvelle fonctionnalité être développée dans leur propre "monde" fusionnant dans le master une fois qu'ils sont terminés?
De toute façon, il y aura des conflits, il faut donc consacrer du temps à les résoudre.
la source
Réponses:
Plus une branche vit longtemps, plus elle est en mesure de diverger de la branche principale et plus la fusion qui en résulte sera compliquée et compliquée à la fin de sa fusion. Dix conflits mineurs sont plus faciles à résoudre qu'un conflit massif et peuvent empêcher les développeurs de dupliquer ou de gaspiller leurs efforts. Étant donné que, vous devez fusionner
master
dansA
etB
régulièrement; Une fois par jour est une recommandation plutôt commune, bien que si vous avez beaucoup d’activité sur vos branches, vous souhaiterez peut-être fusionner plusieurs fois par jour.En plus de faciliter la résolution des conflits, vous mentionnez spécifiquement
C
une branche de correction de bugs. En tant que développeur, je souhaiterais que ma branche dispose de toutes les dernières corrections de bogues, pour éviter de répéter le comportement qui a conduit à un bogue, ou d'écrire des tests basés sur des données erronées.Si vous savez qu'il y aura des conflits, vous voudrez peut-être adopter une stratégie de branchement différente. Conservez plusieurs modifications dans le même fichier sur la même branche, dans la mesure du possible, et réduisez ou éliminez le nombre de conflits. Modifiez les histoires de manière à les rendre complètement indépendantes autant que possible, et modifiez les branches pour éventuellement couvrir plusieurs histoires (les branches, les fonctionnalités et les histoires ne sont pas toujours interchangeables).
la source
En supposant que votre intention soit de fusionner finalement A, B en maître et de maintenir une base de code unique, ce n’est jamais une bonne idée de dévier trop du maître. S'écarter du maître trop longtemps, en particulier lorsque des correctifs de bogues et d'autres développements sont en train de fusionner avec le maître alors que A, B sont en cours de développement, provoquera certainement des conflits.
Je considérerais des stratégies similaires à celles qui suivent
la source
Habituellement, c'est souvent mieux qu'un gros.
Les demandes de retrait plus petites et plus fréquentes sont presque toujours meilleures.
J'ai commencé à utiliser des indicateurs de configuration principalement pour pouvoir effectuer plus tôt des requêtes d'extraction plus petites, ce qui me permet de fusionner le code plus facilement, tout en laissant la fonctionnalité désactivée. Plus la demande d'extraction est petite, plus il est facile d'examiner le code, même s'il y a plus de demandes d'extraction totales. La plupart des humains, de quelque type que ce soit, ne seront pas en mesure de procéder à des examens significatifs de demandes d’appel massif. Il est simplement trop difficile pour notre RAM mentale de comprendre toutes les implications possibles d'un changement de code massif.
La création d'un indicateur de configuration entraîne une charge supplémentaire, de sorte que cela ne vaut pas la peine pour les plus petites fonctionnalités. Mais alors, votre demande de tirage sera de toute façon petite.
Il peut toutefois y avoir des situations où la fonctionnalité doit être publiée en une fois. Même dans ce cas, il serait peut-être préférable de faire de plus petites demandes d'extraction à une autre branche à cette fin.
La plupart de mes collègues gémissent lorsque quelqu'un crée une demande d'attraction massive, et pour la plupart à juste titre.
Notez également que, parfois, j'ai besoin de sélectionner les commits dans une branche distincte. Si ce qui doit être sélectionné peut être mis dans un seul commit, il est plus facile de le déplacer dans d'autres branches. C’est un cas où il est préférable d’avoir peu d’engagements, mais ce n’est pas exactement le processus standard si vous choisissez le meilleur.
la source
Dans Refactoring de Martin Fowler, le conseil qu'il donne est de ne jamais laisser une branche dériver de son maître plus d'une journée. IIRC, vous devriez faire un petit changement, tester pour vous assurer que vous n'avez rien cassé, puis le fusionner.
la source
A
etB
tenez bien les nouvelles révisions radicales du fonctionnement de l'application, elles ne sont pas "terminées" dans le mois Cependant, ils sont également inutiles avant d'avoir terminé ...Une autre option pour les modifications très longues qui peuvent être terminées mais qui ne sont pas prêtes à l'emploi est de les placer derrière un indicateur de fonctionnalité afin qu'elles puissent être fusionnées pour être maîtrisées sans risque de se casser. Ensuite, lorsqu'ils sont prêts à être utilisés, l'indicateur de fonctionnalité peut être supprimé.
la source