web-dev-qa-db-fra.com

Les développeurs bloqués en attendant le code pour fusionner d'une autre branche à l'aide de gitflow

Notre équipe vient de passer le passage de Fogbugz & Four/Mercurial à Jira & Stash/Git. Nous utilisons le modèle d'écoulement Git pour la ramification et nous ajoutons des branches de sous-masques hors des succursales (relatives à la sous-tâches JIRA des fonctionnalités JIRA). Nous utilisons Stash pour attribuer un critique lorsque nous créons une requête de traction pour fusionner dans la branche parente (généralement développer mais pour les sous-tâches dans la branche des fonctionnalités).

Le problème que nous constatons est que même avec la meilleure planification et la meilleure rupture des cas de caractéristiques, lorsque plusieurs développeurs travaillent ensemble sur la même fonctionnalité, par exemple sur le front-end et le dos, s'ils travaillent sur un code interdépendant qui est Dans les branches distinctes, un développeur finit par bloquer l'autre.

Nous avons essayé de tirer des branches des autres au fur et à mesure que nous développons. Nous avons également essayé de créer des succursales d'intégration locales Chaque développeur peut tirer de plusieurs branches pour tester l'intégration au fur et à mesure de leur développement. Enfin, et cela semble fonctionner peut-être le meilleur pour nous jusqu'à présent, cependant avec un peu plus de frais généraux, nous avons essayé de créer une branche d'intégration de la branche de fonctionnalité à partir de la batte. Lorsqu'une branche de sous-tâche (désactivée de la branche de fonctionnalité) est prête pour une demande de traction et une critique de code, nous fusionnons également manuellement ces jeux de modification dans cette branche d'intégration de fonctionnalités. Ensuite, tous les développeurs intéressés sont capables de tirer de cette branche d'intégration dans d'autres branches de sous-tâches dépendantes. Cela empêche toute personne d'attendre une branche qu'ils dépendent de passer une révision du code.

Je sais que ce n'est pas nécessairement une question de GIT - elle a trait à travailler sur le code interdépendant dans plusieurs branches, mélangée à notre propre processus de travail et à notre culture. Si nous n'avions pas eu la politique de révision de code stricte pour développer (vraie branche d'intégration), le développeur 1 pourrait-il fusionner pour développer pour le développeur 2 à tirer de. Une autre complication est que nous sommes également tenus de faire des tests préliminaires dans le cadre du processus d'examen du code avant de remettre la fonctionnalité de Qa.Ce signifie que même si le développeur frontal 1 tire directement à partir de la branche de Developer Back-end Developer 2 Allez, si le développeur de fin de compte 2 termines et sa demande de traction est assis dans la revue de code pendant une semaine, puis le développeur frontal 2 techniquement ne peut pas créer son examen de demande/code de traction car son critique de code ne peut pas Test parce que le code de Developer Back-End 2 n'a pas encore été fusionné dans le développement.

En bout de ligne, nous nous trouvons dans une approche beaucoup plus en série plutôt que parallèle dans ces cas, en fonction de la voie que nous allons, et souhaitez trouver un processus à utiliser pour éviter cela.

La dernière chose que je mentionnerai, c'est que nous nous rendons compte en partageant le code à travers les succursales qui n'ont pas été examinées et finalisées pourtant nous sommes essentiellement en utilisant le code bêta d'autrui. Dans une certaine mesure, je ne pense pas que nous puissions éviter cela et sont disposés à accepter cela dans une certaine mesure.

18
fogwolf

La question pourrait également se situer dans une séparation trop rigide de la tâche entre le développement de la fin de la fin et de la fin.

Si un développeur frontal a besoin d'une nouvelle API, n'est-il pas possible de lui permettre de créer une API factice à l'arrière (retour toujours la même valeur par exemple) pour valider la mise en page? Ensuite, engagez cette implémentation partielle avec un talon et une seconde fois, un développeur de back-end mettra en œuvre la fonctionnalité réelle.

En brisant la dépendance, vous obtiendrez un meilleur débit et vous n'avez pas tout d'accord pour une tâche unique qui agit comme un goulot d'étranglement.

12
Xavier T.

Votre problème: Développeur une succursale de Master, Développer B Branches de Master, les deux travaillent sur des caractéristiques étroites et le fait inévitable que la fusion dans la branche principale est difficile à cause des conflits inévitables, c'est ce que tout le monde est de retour.

Si cela est prévisible, A et B pourraient d'abord créer une branche commune, puis chaque branche pour leur travail séparé de cette branche commune, fusionnez chacun de leurs travaux distincts dans la branche commune, et maintenant vous avez une branche libre sans conflit qui est beaucoup plus facile à intégrer.

5
gnasher729

Une chose que vous puissiez faire pour aider la situation est de bien regarder les moyens de raccourcir le cycle de développement.

Dans le cas où un développeur attend une fonctionnalité d'un autre développeur, existe-t-il une manière dont une partie des premiers développeurs travaillent peut-être passer par examen et intégration avant toute la fonctionnalité pour libérer le bloc?

Y a-t-il des moyens de casser des fonctionnalités dans des unités de travail plus petites pour conserver le cycle d'intégration?

De plus, combien de temps prend l'intégration? S'il y a un long tour autour d'une construction ou d'une intégration, cela peut ralentir toute la file d'attente. Voyez s'il y a quelque chose que vous pouvez faire pour accélérer la durée de construction afin que les files d'attente soient libérées plus rapidement.

0
Steve Mitcham