web-dev-qa-db-fra.com

Les demandes de tirage dépendantes dans Github sont-elles possibles?

Actuellement, je travaille sur une très grosse demande de pull. Afin de garder les revues de code en quelque sorte gérables, l'idée était de diviser la demande d'extraction complète en parties isolées, qui dépendent cependant les unes des autres.

Un exemple serait:

  • Pull request 1: Créer des interfaces: Interface A & B et restructurer le code
  • Pull request 2: Implémentation et tests de l'interface A (dépend de la pull request1)
  • Pull request: Implémentation et tests de l'interface B (dépend de la pull request2)
  • Pull request 4: Test mixte d'implémentations (dépend de 2 + 3)

Existe-t-il un moyen dans Github de déposer les quatre demandes d'extraction en même temps avec des dépendances?

49
fyr

Pour autant que je puisse voir, c'est impossible, et à mon avis, c'est l'un des principaux inconvénients de GitHub par rapport à d'autres outils de révision de code. Gerrit configure automatiquement les révisions de code dépendantes lorsque vous envoyez des validations qui dépendent les unes des autres, et dans Phabricator, c'est plus pénible, mais toujours possible.

Il est également bon de garder à l'esprit qu'il existe plusieurs façons d'utiliser les relations publiques GitHub. La méthode de collaboration open source normale consiste à créer un référentiel et à soumettre une demande d'extraction entre référentiels, mais dans d'autres cas (par exemple au sein d'une organisation), vous pouvez soumettre des demandes d'extraction pour des différences dans le même référentiel. Je pense que dans un référentiel unique, il est plus raisonnable d'obtenir quelque chose dans le sens des demandes d'extraction dépendantes, car vous pouvez configurer la structure de validation/branche dans ce référentiel.

Voici un article de blog qui décrit comment obtenir certains avantages des demandes de tirage dépendantes, qui, je pense, nécessitent que tous les commits soient dans le même référentiel: http://graysonkoonce.com/stacked-pull-requests-keeping-github -diffs-small /

Un résumé:

  • Pour soumettre 5 demandes d'extraction dépendantes, créez une hiérarchie de branche à 5 niveaux et soumettez chaque PR comme cette branche en fonction de la branche précédente.
  • Pour mettre à jour la révision 2 sur 5, envoyez une mise à jour à la branche 2, puis effectuez 3 opérations de fusion pour intégrer les modifications dans les révisions 3, 4 et 5.
  • Vous devez effectuer toutes les modifications en même temps, car GitHub ne prend pas en charge la mise à jour de la branche cible des PR. Dans l'exemple, les 5 révisions de code ont été enregistrées en tant que validation unique. GitHub prend désormais en charge la mise à jour de la branche de base d'un PR, de sorte que les PR peuvent être débarqués un par un.

Cette approche semble fonctionner correctement pour les changements géants qui sont mieux examinés en petits morceaux (bien que le maintien d'une hiérarchie de branche à n niveaux soit une douleur par rapport à quelque chose comme git rebase -i), mais cela ne permet pas vraiment de créer un "pipeline de révision de code" dans lequel vous pouvez avoir des différences de dépendance à différents stades de la révision et vous pouvez atterrir plus tôt lors de leur révision.

Certaines autres ressources Internet qui semblent également souligner la limitation:

https://www.quora.com/Is-there-a-good-system-for-adding-multiple-pull-requests-to-GitHub

https://muffinresearch.co.uk/how-do-you-deal-with-dependent-branches-on-github/

Ma compréhension est que les gens qui utilisent GitHub PR essaient généralement de structurer leur flux de travail pour ne pas s'appuyer sur les revues de code dépendantes. Quelques exemples:

  • Au lieu de décomposer un changement en étapes incrémentielles révisables indépendamment, soumettez-le comme un examen de code monolithique qui se posera en une seule fois. GitHub vous permet toujours de diviser les révisions de code en plusieurs validations que le réviseur peut voir, mais elles ne peuvent pas être approuvées/débarquées indépendamment.
  • Essayez de structurer votre travail de manière à apporter des modifications dans des parties non liées du code et à les placer dans des branches indépendantes que vous pouvez utiliser pour soumettre des RP indépendants. Vous pouvez toujours conserver une branche locale avec toutes les modifications appliquées à l'aide de la sélection de cerises ou d'autres approches.
  • Si vous avez un changement qui dépend d'un PR en attente, attendez simplement que le PR soit accepté et fusionné avant de soumettre le nouveau PR. Vous pourriez mentionner quelque part que vous avez un autre PR qui dépend de celui-ci, et peut-être que cela motivera le réviseur de code à y accéder plus tôt.
44
Alan Pierce