Dans notre équipe, nous utilisons Git comme contrôle source. Plusieurs domaines de code sont presque indépendants mais nous avons des chevauchements. Dernièrement, nous avons discuté des flux de travail et des approches pour utiliser le contrôle de la source. Une plainte qui apparaît lorsque je promouve à l'aide d'un flux de travail sur la branche de fonctionnalité est que les gens rencontrent souvent des conflits de fusion compliqués qu'ils résolvent de manière incorrecte. Par compliqué, je veux dire "pas évident quant à la façon de résoudre". À la lumière de cela, d'autres flux de travail sont en train d'être utilisés plus activement, un tel flux de travail "pull rebas".
En tant que défenseur de l'approche de la branche de fonctionnalité, je ne reçois pas vraiment la plainte. Oui, vous devez garder vos branches de fonctionnalité locales à jour de Maître ou partout où, mais c'est à propos du seul vrai problème que je vois. Je pense que si vos fondues sont toujours compliquées et que vous pouvez avoir des effets secondaires, c'est plus un problème de travail d'équipe qu'un problème de git.
Ai-je raison de penser cela? Sont compliqué la fusion conflit un signe de quoi que ce soit bien ou mauvais?
Il n'est pas impossible que le problème soit votre code. Si votre codeBase a beaucoup d'internats entre les modules, chaque changement va avoir des vrilles partout, et chaque développement interagit avec le code de quelqu'un d'autre, ce sera un cauchemar.
J'avais tendance à penser que vous remarqueriez cela d'une autre manière, mais il est possible que vous soyez tellement habitué à cela que vous ne pouvez plus le voir.
Je suis habitué au flux de travail "Fetch-Rebase-Push". Ce qui est en fait le premier, le plus primitif, le flux de travail décrit dans votre tutoriel particulier sont les avantages:
Maintenant, concernant des conflits de fusion compliqués. Je ne comprends pas comment on pourrait faire l'expérience des fonts compliqués fréquents et. La complication ne provient pas de ne pas reculer/cueillir des cerises pendant une longue période, travaillant sur cette caractéristique isolée pendant un mois.
Personnellement, je préférerais traiter des conflits fréquents et faciles à fusionner (réellement rebasé), plutôt que de rares, englobant la fusion d'horreur.
La fusion et les refaissements devraient causer exactement les mêmes conflits, pour les conflits inhérents à un humain de résoudre (c'est-à-dire deux développeurs modifiant la même ligne de code). Pour d'autres conflits, les fantasmes ont effectivement tendance à être plus propres, car vous ne changez pas le SHA-1 de commettre partout. Je ne sais pas comment vous gérez d'entrer dans un état où les fonts provoquent plus de conflits que des refaissons, mais c'est certainement un signe que le flux de travail de certaines personnes est gâché, et ils ont probablement besoin de plus de formation sur la manière dont Git fonctionne. Enlève-ils la fusion d'autres personnes commettant quand ils font leurs reconstructions locales, ou quelque chose comme ça?
L'avantage et l'inconvénient de la méthode Pull-Rebase sont très similaires aux flux de travail centralisés que beaucoup de gens sont habitués. Vous n'êtes pas obligé de comprendre la succursale afin de l'utiliser.
En tout état de cause, il est parfaitement réalisable de faire un flux de travail de fonctionnalité uniquement localement, si vous ne pouvez pas faire connecter d'autres personnes.
Le projet que je travaille sur ce type de problème de temps à autre et il semble résulter de quelques facteurs:
Je suis intéressé par le potentiel de fustion sémantique pour aider avec certains de ces problèmes, mais évidemment, il ne s'agit que d'une utilisation si vous travaillez dans une langue, elle peut analyser et je n'ai pas encore coulé Dans tous les défis importants lorsque je l'utilise, je ne peux donc pas garantir son efficacité.
À moins que les développeurs ne modifient les engageurs historiques (au lieu de fantasmes pure), les conflits dans un modèle de type de flux de travaux de fonctionnalité sont un signe d'une base de code de code (/ BrandNew codeBase) ou de chevauchement.
Vous avez une succursale principale (maître) et tout le monde travaille dans leurs branches de fonctionnalités.
Les travaux dans les branches de fonctionnalités peuvent prendre n'importe quoi de quelques heures à quelques mois.
De temps en temps, quelqu'un va inverser la fusion de leur contact dans la branche principale. La tête de votre équipe doit s'assurer qu'une seule personne fait une fusion inversée à la fois. Une fois que cela a été fait, vous devez transmettre la fusion de la branche principale dans la branche de votre fonctionnalité. Une fois que tout le monde fait une fusion en avant, une autre personne peut être autorisée à inverser la fusion dans la branche principale. Sinon, trop de changements seront fusionnés et vous aurez des tonnes de conflits de fusion sur votre fusion en avant.
Juste pour clarifier la terminologie, en "fusion inverse", je veux dire en fusion d'une branche de fonctionnalité dans la branche principale et par "Fusion de transfert", je veux dire en fusionnant de la branche principale en une branche de fonctionnalité. Sur la base de ce que j'ai vécu auparavant, vous êtes susceptible de voir plus de conflits de conflits sur la fusion inverse, par opposition à la fusion en avant.
Deux choses qui peuvent aider: une, éviter tout outil qui apporte des changements par eux-mêmes. Deux développeurs utilisant différents paramètres d'onglet sont une recette de désastre. Deux, apportez des modifications dans différents endroits. Vous avez un problème, par exemple, si trois développeurs ajoutent du code à la fin du même fichier - bien mieux s'ils ajoutent du code à différents endroits.