web-dev-qa-db-fra.com

Sont fréquentes la fusion compliquée conflit un signe de problèmes?

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?

36
joshin4colours

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.

25
Michael Kohne

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:

  • Véritable intégration continue
  • Gestion des conflits précoces - juste après que l'on ait écrit et testé le code
  • Réponse rapide - "-hey, Bob, l'interpolation cubique que vous avez écrite donne une sortie drôle, pourriez-vous le regarder pendant que je suis au déjeuner?"
  • Aucune fusion ne s'engage - une chronologie propre comme si un développeur a écrit Everithyng

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.

19
Vorac

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.

8
Karl Bielefeldt

Le projet que je travaille sur ce type de problème de temps à autre et il semble résulter de quelques facteurs:

  • Nous utilisons Visual Studio et des fichiers tels que Visual Studio .SLN ne sont que des documents XML (qui ne répondent pas bien aux fonts textuels) pleins de GUID (quel git ne peut pas comprendre mieux que le reste de nous) et peut facilement être mal fusionné et causer des dossiers à perdre.
  • Certaines personnes travaillent sur des zones similaires du code, de sorte que les modifications apportées puissent être passées à côté de l'autre dans les classes. Bien que inévitable dans cette situation, ce type de configuration sera un travail très acharné pour tout système de contrôle de source. Même si vous avez une grande communication dans votre équipe, parfois, les gens ne se rendront pas compte qu'ils se heurtent à un code et de conflits d'un autre.

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é.

5
glenatron

À 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.

5
sjakubowski

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.

0
CodeART

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.

0
gnasher729