Remarque
Les demandes de tirage empilées sont en préversion publique cours et peuvent être modifiées.
Les demandes de tirage volumineuses sont difficiles à examiner et à créer des goulots d’étranglement, en particulier lorsque l’IA vous aide à générer un volume élevé de code dans un court délai. La qualité de l’examen dégrade également à mesure que la taille des demandes de tirage augmente. Les réviseurs peuvent ignorer le résultat, manquer des problèmes ou procrastinér et quitter la demande de tirage jusqu’à ce qu’elle augmente et développe des conflits de fusion.
Les demandes de tirage empilées conservent les modifications de code volumineuses pouvant être examinées.
Une pile est une série de demandes d’extraction dans le même référentiel où chaque demande de tirage cible la branche de la demande de tirage sous celle-ci, formant une chaîne ordonnée qui atterrit sur une branche unique, généralement votre branche principale. Au lieu d’une demande de tirage volumineuse, vous obtenez un ensemble de demandes de tirage plus petites. Étant donné que chaque demande de tirage a ses propres différences ciblées, les collègues peuvent examiner et approuver chaque couche indépendamment.
Ce tutoriel vous guide tout au long de l’utilisation des demandes de tirage empilées avec des agents pour créer une fonctionnalité dans des couches pouvant être examinées individuellement. Pour notre exemple, nous allons envisager comment ajouter l’authentification utilisateur à une application. Nous allons utiliser CLI GitHub Copilot et la compétence de l’agent gh-stack .
Prerequisites
Pour utiliser la gh-stack compétence avec un agent, vous devez d’abord installer GitHub CLI et l’extension gh-stack CLI. Vous aurez besoin des éléments suivants :
- GitHub CLI (
gh) 2.90.0 ou version ultérieure, et Git 2.20 ou version ultérieure.- Authentifiez-vous GitHub CLI avec
gh auth login.
- Authentifiez-vous GitHub CLI avec
- Dépôt GitHub vers lequel vous pouvez envoyer (push).
- CLI GitHub Copilot installé et connecté.
Dans GitHub CLI, installez l’extension et la gh-stack compétence.
gh extension install github/gh-stack
gh skill install github/gh-stack
Remarque
Tout au long de ce tutoriel, si vous préférez exécuter des commandes de pile vous-même au lieu de le laisser Copilot faire, vous devez utiliser GitHub CLI.
1. Concevoir une pile avant de générer du code
Une bonne pile est comme construire une maison, commencer par une fondation forte, cadrer les murs, installer le câblage, puis terminer la cloison sèche. Chaque couche créée dépend de celle ci-dessous. À la fin, un réviseur doit pouvoir lire les demandes de tirage de bas en haut et suivre la fonctionnalité qui se réunit.
- Fractionnez la fonctionnalité en couches. Chaque couche doit être un changement unique et cohérent qui peut être examiné par lui-même.
- Conservez chaque couche suffisamment petite pour que sa demande de tirage soit une lecture rapide. Si une couche a besoin d’une longue description à réviser, elle est probablement trop volumineuse.
- Déterminez les limites vous-même ou travaillez avec Copilot un plan. De toute façon, vous possédez la forme de la pile.
- Triez les couches par dépendance. Les changements fondamentaux vont en bas. Tout ce qui dépend d’eux va plus haut. Pour l’authentification, il peut s’agir des points suivants :
- Couche 1 : modèle de données et migration
- Couche 2 : points de terminaison CRUD
- Couche 3 : middleware JWT et gardes
- Couche 4 : tests unitaires et d’intégration
Exemples d’invites
Propose a layered approach to add user authentication to this app. Order the layers by dependency, keeping each layer independently reviewable.Review my planned layers and flag any that are too large or that depend on a branch above them.
2. Créez d’abord la couche inférieure
Démarrez la pile avec la base. Tout ce qui précède dépend de l’obtention de cette couche correctement.
- Informez-vous Copilot de la création d’une demande de tirage empilée et demandez-lui de créer la première couche en fonction de votre plan. L’agent utilise la
gh-stackcompétence pour créer la première branche de la pile. - Si vous préférez créer la pile vous-même, créez-la directement avec
gh stack init, en utilisant un préfixe pour conserver les noms de branche, par exemple.gh stack init BRANCH-NAME-1 - Passez en revue le changement généré vous-même avant de continuer. Une erreur dans la couche inférieure se propage à chaque branche au-dessus de celle-ci, donc donnez-lui un examen avant de passer en revue.
Exemples d’invites
Start the pr-stack and build only the first layer: the user data model and migration.Conduct a review of the generated code and confirm this branch contains only the data model and migration, and nothing that belongs in a later layer.
3. Empilez chaque nouvelle couche de code en haut
Avec la base en place, générez le reste de la fonctionnalité une couche à la fois.
- Demandez Copilot à ajouter la couche suivante et à l’implémenter dans le contexte des couches ci-dessous. L’agent ajoute une branche en haut de la pile et valide le travail là-bas.
- Si vous souhaitez ajouter une branche vous-même, utilisez
gh stack add BRANCH-NAME-NEXT. - Si une couche commence à croître trop grande, déterminez si elle a dérivé en dehors de son plan ou si vous avez réellement besoin de deux couches au lieu d’une.
- Créez de nouvelles branches pour chaque couche au fur et à mesure, de sorte que chaque branche reste un différences propre et autonome.
- Lorsque vous êtes prêt à créer des demandes de tirage (pull requests) demandez Copilot à soumettre votre pile, ou si vous souhaitez le faire vous-même, utilisez
gh stack submit. - Laissez chaque demande de tirage se tenir elle-même. Un titre ciblé et une description concise et explicite de la couche sont généralement suffisants.
Exemples d’invites
Add the next layer in a new branch on top: the CRUD endpoints that use the user model from the branch below.This branch is getting large. Suggest how it could be split into two independently reviewable layers.
4. Passez en revue les demandes de tirage vous-même avant de demander une révision
Chaque couche est petite, ce qui facilite également l’auto-révision. Passez une transmission à chaque branche avant d’impliquer des collègues. Les réviseurs doivent recevoir des modifications que vous approuvez déjà.
- Exécutez vos tests, les linters et l’analyse du code sur chaque branche. Laissez-vous Copilot aider à vérifier chaque couche par rapport à vos normes avant de demander des révisions.
- Pour connaître les techniques d’examen approfondi des modifications générées par l’IA, consultez Passer en revue le code généré par l’IA.
5. Demander des révisions pour la pile, en commençant en bas
Avec les couches générées, les réviseurs obtiennent de petits différences au lieu d’un grand mur de code.
- Si les dépendances sont fortement intégrées, demandez des révisions en commençant au bas de la pile. Vous pouvez donc intégrer les modifications de la pile avant les révisions suivantes.
- Si vous avez besoin de révisions de personnes distinctes pour différentes couches, les réviseurs peuvent travailler en parallèle. Une personne peut passer en revue le modèle de données, tandis qu’une autre examine les points de terminaison, et aucune wades dans l’ensemble de la fonctionnalité.
6. Itérer sur les commentaires
Passez en revue les commentaires sur les couches individuellement, et non sur l’ensemble de la fonctionnalité. Les piles vous permettent de corriger la couche appropriée en place et de porter le changement vers le haut.
- Demandez Copilot à réviser la couche avec indicateur de révision. L’agent se déplace vers la branche droite, apporte la modification et la valide là-bas. Ensuite, il rebase les couches ci-dessus afin qu’elles récupèrent le correctif.
- Conservez chaque correctif dans la couche auquel il appartient. Une modification apportée à la branche incorrecte peut confondre et créer des erreurs sur la pile.
- Lorsque vous apportez des correctifs, demandez Copilot à rebaser les branches ci-dessus et à propager les modifications.
- Si vous souhaitez parcourir la pile vous-même, naviguer dans les branches avec
gh stack down,gh stack upough stack checkout BRANCH-NAME. Ensuite, validez vos modifications et exécutezgh stack rebase --upstackpour effectuer des modifications dans la pile.
Exemples d’invites
A reviewer flagged that the auth service doesn't handle expired tokens. Fix that on BRANCH-NAME and test the changes.I've rebased the layers above onto this fix. Check that the branch with endpoints still works with the change and flag anything that needs updating.
7. Fusionner à partir de la couche inférieure
Une pile se fusionne dans l’ordre, en commençant par la couche pointant vers votre branche principale. Fusionnez toutes les couches en même temps, ou un par un, et GitHub cible automatiquement la couche suivante pour qu’elle pointe vers la partie principale.
- Fusionnez la pile une à la fois qui fonctionne à partir du bas vers le haut, ou depuis n’importe où dans la pile, et toutes les branches sous la demande de tirage que vous fusionnez seront fusionnées à partir du bas vers le haut.
- La différence de chaque couche reste exactement la même par rapport à son parent, mais uniquement les modifications de base, ce qui facilite la fusion d’une couche à la fois sans affecter le travail en cours ou les révisions.
- Utilisez la fusion automatique ou une file d’attente de fusion pour que chaque couche fusionne dès qu’elle est approuvée et que ses vérifications réussissent. Vous n’avez pas besoin d’attendre sur l’ensemble de la pile à la fois.
Une fois la couche supérieure fusionnée, l’ensemble de la fonctionnalité a atterri. Chaque pièce a été examinée plus efficacement comme une petite modification délibérée plutôt qu’une demande de tirage volumineuse.