Les requêtes de retrait dépendantes dans Github sont-elles possibles?

Actuellement, je travaille sur une demande très importante. Pour que les révisions de code restnt gérables d’une façon ou d’une autre, l’idée était de diviser la requête de tirage complète en parties isolées, qui dépendent toutefois les unes des autres.

Un exemple serait:

  • Demande de tirage 1 : Création d’interfaces: Interface A & B et restructuration du code
  • Demande de tirage 2 : Implémentation de l’interface A et Tests (dépend de la requête pull1)
  • Requête de traction 3 : Implémentation de l’interface B et tests (dépend de la requête pull2)
  • Demande de tirage 4 : test mixte des implémentations (dépend de 2 + 3)

Existe-t-il un moyen dans Github de classer les quatre requêtes d’extraction simultanément avec des dépendances?

Pour autant que je sache, c’est impossible, et à mon avis, c’est l’un des principaux inconvénients de GitHub par rapport aux autres outils de révision de code. Gerrit configure automatiquement les révisions de code dépendant lorsque vous poussez des commits qui dépendent les uns des autres, et dans Phabricator, c’est plus douloureux, mais toujours possible.

Il est également bon de garder à l’esprit qu’il existe plusieurs façons d’utiliser les PR GitHub. La méthode de collaboration open source normale consiste à générer un repository et à soumettre une requête de récupération croisée, mais dans d’autres cas (par exemple, au sein d’une organisation), vous pouvez envoyer des demandes de diffs dans le même référentiel. Je pense qu’au sein d’un même référentiel, il est plus raisonnable d’obtenir quelque chose dans le style des requêtes d’extraction dépendantes, car vous pouvez configurer la structure de validation / twig dans ce repository.

Voici un article de blog qui explique comment tirer parti des requêtes de retrait dépendantes, ce qui, à mon avis, nécessite que toutes les commandes 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 twig de niveau 5 et soumettez chaque demande de publication comme cette twig en fonction de la twig précédente.
  • Pour mettre à jour la révision 2 de 5, envoyez une mise à jour à la twig 2, puis effectuez 3 opérations de fusion pour intégrer les modifications dans les révisions 3, 4 et 5.
  • Vous devez transférer toutes les modifications en une fois, car GitHub ne prend pas en charge la mise à jour de la twig cible des PR. Dans l’exemple, les 5 révisions de code ont été envoyées en tant que validation unique.

Cette approche semble fonctionner correctement pour les changements géants qu’il est préférable de revoir en petits morceaux (bien que le maintien d’une hiérarchie de twigs de niveau n profond soit difficile par rapport à quelque chose comme git rebase -i ), pipeline de révision de code “où vous pouvez avoir des différences de dépendance à différents stades de la révision et où vous pouvez les retrouver plus tôt lors de leur révision.

Certaines autres ressources Internet qui semblent également appeler 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-twigs-on-github/

D’après ce que je comprends, les personnes utilisant les PR GitHub essaient généralement de structurer leur stream de travail pour ne pas dépendre des révisions de code dépendantes. Quelques exemples:

  • Au lieu de modifier un changement en étapes incrémentielles pouvant être examinées de manière indépendante, soumettez-le en tant que révision de code monolithique qui se déroulera en une seule fois. GitHub vous permet toujours de diviser les revues de code en plusieurs validations que le réviseur peut visualiser, mais elles ne peuvent pas être approuvées / reçues indépendamment.
  • Essayez de structurer votre travail de manière à apporter des modifications aux parties non associées du code et à les placer sur des twigs indépendantes que vous pouvez utiliser pour soumettre des PR indépendants. Vous pouvez toujours conserver une twig locale avec toutes les modifications appliquées à l’aide de la sélection par cerise ou d’autres approches.
  • Si vous avez un changement qui dépend d’un RP en suspens, 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-là, et peut-être que cela motivera le relecteur de code à y parvenir plus tôt.