Fusion d'une demande d'extraction dans unAWS CodeCommitréférentiel - AWS CodeCommit

AWS CodeCommit n'est plus disponible pour les nouveaux clients. Les clients existants de AWS CodeCommit peuvent continuer à utiliser le service normalement. En savoir plus »

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Fusion d'une demande d'extraction dans unAWS CodeCommitréférentiel

Une fois que votre code a été révisé et que toutes les règles d'approbation (le cas échéant) de la demande d'extraction ont été satisfaites, vous pouvez fusionner une demande d'extraction de l'une des manières suivantes :

  • Vous pouvez utiliser la console pour fusionner votre branche source dans la branche de destination à l'aide d'une des stratégies de fusion disponibles, ce qui ferme automatiquement la demande d'extraction. Vous pouvez également résoudre les conflits de fusion dans la console. La console affiche un message indiquant si la demande d'extraction peut être fusionnée ou si des conflits doivent être résolus. Lorsque tous les conflits sont résolus et que vous choisissez Merge (Fusionner), la fusion est effectuée à l'aide de la stratégie de fusion que vous choisissez. La fusion rapide (fast-forward) est la stratégie de fusion par défaut, qui est l'option par défaut pour Git. En fonction de l'état du code dans les branches source et de destination, cette stratégie peut ne pas être disponible, mais d'autres le sont, comme la fusion par écrasement ou la fusion tripartite.

  • Vous pouvez utiliser l'AWS CLI pour fusionner et fermer la demande d'extraction à l'aide de la stratégie de fusion rapide (fast-forward), de la stratégie d'écrasement (squash) ou de la stratégie tripartite (3-way).

  • Sur votre ordinateur local, vous pouvez utiliser la commande git merge pour fusionner la branche source dans la branche de destination, puis transmettre le code fusionné à la branche de destination. Cette approche a des inconvénients que vous devez examiner attentivement. Elle fusionne la demande d'extraction, que les exigences relatives aux règles d'approbation de la demande d'extraction aient été satisfaites ou non, en contournant ces contrôles. La fusion et le transfert de la branche de destination ferme également automatiquement la demande d'extraction si cette dernière est fusionnée à l'aide de la stratégie de fusion rapide. L'un des avantages de cette approche est que legit mergevous permet de choisir les options ou les stratégies de fusion qui ne sont pas disponibles dans la console CodeCommit. Pour en savoir plus sur git merge et les options de fusion, consultez git-merge ou votre documentation Git.

CodeCommit ferme automatiquement une demande d'extraction si la branche source ou de destination de cette dernière est supprimée.

Fusion d'une demande d'extraction (console)

Vous pouvez utiliser la console CodeCommit pour fusionner une demande d'extraction dans un référentiel CodeCommit. Lorsque le statut d'une demande d'extraction passe à Merged (Fusionnée), celle-ci ne s'affiche plus dans la liste des demandes d'extraction ouvertes. Une demande d'extraction fusionnée est classée comme fermée. Le statut Open (Ouverte) ne peut pas lui être de nouveau affecté, mais les utilisateurs peuvent continuer à commenter les modifications et à répondre aux commentaires. Après la fusion ou la fermeture d'une demande d'extraction, vous ne pouvez plus l'approuver, annuler son approbation ou remplacer les règles d'approbation qui s'appliquent à cette demande.

  1. Ouvrez la console CodeCommit à l'adresse.https://console.aws.amazon.com/codesuite/codecommit/home.

  2. Dans Référentiels, sélectionnez le nom du référentiel.

  3. Dans le volet de navigation, choisissez Demandes d'extraction.

  4. Par défaut, une liste de toutes les demandes d'extraction ouvertes s'affiche. Choisissez la demande d'extraction ouverte que vous souhaitez fusionner.

  5. Dans la demande d'extraction, choisissez Approvals (Approbations). Examinez la liste des approbateurs et vérifiez que toutes les règles d'approbation (le cas échéant) ont été satisfaites. Vous ne pouvez pas fusionner une demande d'extraction si une ou plusieurs règles d'approbation ont le statut Rule not satisfied (Règle non satisfaite). Si personne n'a approuvé la demande d'extraction, voyez si vous souhaitez la fusionner ou si vous souhaitez attendre les approbations.

    Note

    Si une règle d'approbation a été créée pour une demande d'extraction, vous pouvez la modifier ou la supprimer pour débloquer la fusion. Si la règle d'approbation a été créée avec un modèle de règle d'approbation, vous ne pouvez pas la modifier ou la supprimer. Vous pouvez uniquement choisir de contourner les exigences. Pour plus d'informations, consultez Remplacer les règles d'approbation pour une demande d'extraction.

    Demande d'extraction montrant une règle d'approbation dont les conditions n'ont pas été remplies et une liste d'approbateurs vide.
  6. Choisissez Merge (Fusionner).

  7. Dans la demande d'extraction, choisissez entre les stratégies de fusion disponibles. Les stratégies de fusion qui ne peuvent pas être appliquées apparaissent en grisé. Si aucune stratégie de fusion n'est disponible, vous pouvez choisir de résoudre les conflits manuellement dans la console CodeCommit ou de les résoudre localement à l'aide de votre client Git. Pour plus d'informations, consultez Résolution des conflits dans une demande d'extraction dans unAWS CodeCommitréférentiel.

    Une demande d'extraction illustrant les stratégies de fusion disponibles pour la fusion dans la console CodeCommit.
    • Un fusion rapide transmet la référence de la branche de destination à la validation la plus récente de la branche source. Il s'agit du comportement par défaut de Git lorsque cela est possible. Aucune validation de fusion n'est créée, mais l'historique de validation à partir de la branche source est conservé comme s'il s'était déroulé dans la branche de destination. Les fusions rapides n'apparaissent pas comme une fusion de branche dans la vue du visualiseur de validation de l'historique de la branche de destination, car aucune validation de fusion n'est créée. La pointe de la branche source est déplacée rapidement vers la pointe de la branche de destination.

    • Une fusion par écrasement crée une validation contenant les modifications dans la branche source et applique cette validation par écrasement unique à la branche de destination. Par défaut, le message de validation pour cette validation par écrasement contient tous les messages de validation des modifications apportées à la branche source. Aucun historique de validation individuelle des modifications de branche n'est conservé. Cela peut vous aider à simplifier votre historique de référentiel tout en conservant une représentation graphique de la fusion dans la vue de visualisation de la validation de l’historique de la branche de destination.

    • Une fusion tripartite crée une validation de fusion pour la fusion dans la branche de destination, mais conserve également les validations individuelles effectuées dans la branche source dans le cadre de l'historique de la branche de destination. Cela peut vous aider à conserver un historique complet des modifications apportées à votre référentiel.

  8. Si vous choisissez la stratégie de fusion par écrasement ou tripartite, vérifiez le message de validation généré automatiquement et modifiez-le si vous souhaitez modifier les informations. Ajoutez votre nom et votre adresse e-mail pour l'historique des validations.

  9. (Facultatif) Désélectionnez cette option pour supprimer la branche source dans le cadre de la fusion. L'option par défaut consiste à supprimer la branche source lorsqu'une demande d'extraction est fusionnée.

  10. Choisissez Merge pull request (Fusionner la demande d'extraction) pour terminer la fusion.

Fusion d'une demande d'extraction (AWS CLI)

Pour utiliserAWS CLIavec CodeCommit, installez leAWS CLI. Pour plus d'informations, consultez Référence des commandes en ligne.

Pour utiliser le pluginAWS CLIpour fusionner des demandes d'extraction dans un référentiel CodeCommit

  1. Pour savoir si toutes ses règles d'approbation d'une demande d'extraction ont été satisfaites et si la demande est prête à être fusionnée, exécutez la commande evaluate-pull-request-approval-rules en spécifiant :

    • L'ID de la demande d'extraction (avec l'option --pull-request-id).

    • L'ID de révision de la demande d'extraction (avec l'option --revision-id option)). Vous pouvez obtenir l'ID de révision actuel d'une demande d'extraction à l'aide de la commande get-pull-request.

    Par exemple, pour évaluer l'état des règles d'approbation sur une demande d'extraction ayant l'ID 27 et l'ID de révision 9f29d167EXAMPLE :

    aws codecommit evaluate-pull-request-approval-rules --pull-request-id 27 --revision-id 9f29d167EXAMPLE

    Si elle aboutit, cette commande produit une sortie similaire à ce qui suit :

    { "evaluation": { "approved": false, "approvalRulesNotSatisfied": [ "Require two approved approvers" ], "overridden": false, "approvalRulesSatisfied": [] } }
    Note

    Ce résultat indique qu'une demande d'extraction n'est pas fusionnable, car les conditions d'une règle d'approbation n'ont pas été satisfaites. Pour fusionner cette demande d'extraction, vous pouvez demander aux réviseurs de l'approuver pour qu'elle respecte les conditions de la règle. Selon vos autorisations et la façon dont la règle a été créée, vous pouvez également modifier, contourner ou supprimer la règle. Pour plus d'informations, consultez Réviser une demande d'extraction, Remplacer les règles d'approbation pour une demande d'extraction et Modification ou suppression d'une règle d'approbation pour une demande d'extraction.

  2. Pour fusionner et fermer une demande d'extraction à l'aide de la stratégie de fusion rapide, exécutez la commande merge-pull-request-by-fast-forward, en spécifiant les éléments suivants :

    • L'ID de la demande d'extraction (avec l'option --pull-request-id).

    • L'ID de validation complet de la pointe de la branche source (avec l'option--source-commit-id).

    • Le nom du référentiel (avec l'option --repository-name).

    Par exemple, pour fusionner et fermer une demande d'extraction avec l'ID de l'adresse.47et un ID de validation source deExemple 99132 AB0dans un référentiel nomméMyDemoRepo :

    aws codecommit merge-pull-request-by-fast-forward --pull-request-id 47 --source-commit-id 99132ab0EXAMPLE --repository-name MyDemoRepo

    Si elle aboutit, cette commande produit une sortie similaire à ce qui suit :

    { "pullRequest": { "approvalRules": [ { "approvalRuleContent": "{\"Version\": \"2018-11-08\",\"Statements\": [{\"Type\": \"Approvers\",\"NumberOfApprovalsNeeded\": 1,\"ApprovalPoolMembers\": [\"arn:aws:sts::123456789012:assumed-role/CodeCommitReview/*\"]}]}", "approvalRuleId": "dd8b17fe-EXAMPLE", "approvalRuleName": "I want one approver for this pull request", "creationDate": 1571356106.936, "lastModifiedDate": 571356106.936, "lastModifiedUser": "arn:aws:iam::123456789012:user/Mary_Major", "ruleContentSha256": "4711b576EXAMPLE" } ], "authorArn": "arn:aws:iam::123456789012:user/Li_Juan", "clientRequestToken": "", "creationDate": 1508530823.142, "description": "Review the latest changes and updates to the global variables", "lastActivityDate": 1508887223.155, "pullRequestId": "47", "pullRequestStatus": "CLOSED", "pullRequestTargets": [ { "destinationCommit": "9f31c968EXAMPLE", "destinationReference": "refs/heads/main", "mergeMetadata": { "isMerged": true, "mergedBy": "arn:aws:iam::123456789012:user/Mary_Major" }, "repositoryName": "MyDemoRepo", "sourceCommit": "99132ab0EXAMPLE", "sourceReference": "refs/heads/variables-branch" } ], "title": "Consolidation of global variables" } }
  3. Pour fusionner et fermer une demande d'extraction à l'aide de la stratégie de fusion par écrasement, exécutez la commande merge-pull-request-by-squash, en spécifiant les éléments suivants :

    • L'ID de la demande d'extraction (avec l'option --pull-request-id).

    • L'ID de validation complet de la pointe de la branche source (avec l'option--source-commit-id).

    • Le nom du référentiel (avec l'option --repository-name).

    • Le niveau de détails de conflit que vous souhaitez utiliser (avec l'option --conflict-detail-level). Si vous ne spécifiez rien, la valeur par défaut FILE_LEVEL est utilisée.

    • La stratégie de résolution des conflits que vous souhaitez utiliser (avec l'option --conflict-resolution-strategy). Si vous ne spécifiez rien, la valeur par défaut NONE est utilisée et les conflits doivent être résolus manuellement.

    • Le message de validation à inclure (avec l'option --commit-message).

    • Le nom à utiliser pour la validation (avec l'option --author-name).

    • L'adresse e-mail à utiliser pour la validation (avec l'option --email).

    • Si les dossiers vides doivent être conservés (avec l'option --keep-empty-folders).

    L'exemple suivant permet de fusionner et de fermer une demande d'extraction avec l'ID de l'adresse.47et un ID de validation source deExemple 99132 AB0dans un référentiel nomméMyDemoRepo. Il utilise les détails de conflits LINE_LEVEL et la stratégie de résolution des conflits ACCEPT_SOURCE :

    aws codecommit merge-pull-request-by-squash --pull-request-id 47 --source-commit-id 99132ab0EXAMPLE --repository-name MyDemoRepo --conflict-detail-level LINE_LEVEL --conflict-resolution-strategy ACCEPT_SOURCE --author-name "Jorge Souza" --email "jorge_souza@example.com" --commit-message "Merging pull request 47 by squash and accepting source in merge conflicts"

    Si elle aboutit, cette commande produit le même type de sortie qu’une fusion rapide, semblable à ce qui suit :

    { "pullRequest": { "approvalRules": [ { "approvalRuleContent": "{\"Version\": \"2018-11-08\",\"DestinationReferences\": [\"refs/heads/main\"],\"Statements\": [{\"Type\": \"Approvers\",\"NumberOfApprovalsNeeded\": 2,\"ApprovalPoolMembers\": [\"arn:aws:sts::123456789012:assumed-role/CodeCommitReview/*\"]}]}", "approvalRuleId": "dd8b17fe-EXAMPLE", "approvalRuleName": "2-approver-rule-for-main", "creationDate": 1571356106.936, "lastModifiedDate": 571356106.936, "lastModifiedUser": "arn:aws:iam::123456789012:user/Mary_Major", "originApprovalRuleTemplate": { "approvalRuleTemplateId": "dd8b17fe-EXAMPLE", "approvalRuleTemplateName": "2-approver-rule-for-main" }, "ruleContentSha256": "4711b576EXAMPLE" } ], "authorArn": "arn:aws:iam::123456789012:user/Li_Juan", "clientRequestToken": "", "creationDate": 1508530823.142, "description": "Review the latest changes and updates to the global variables", "lastActivityDate": 1508887223.155, "pullRequestId": "47", "pullRequestStatus": "CLOSED", "pullRequestTargets": [ { "destinationCommit": "9f31c968EXAMPLE", "destinationReference": "refs/heads/main", "mergeMetadata": { "isMerged": true, "mergedBy": "arn:aws:iam::123456789012:user/Mary_Major" }, "repositoryName": "MyDemoRepo", "sourceCommit": "99132ab0EXAMPLE", "sourceReference": "refs/heads/variables-branch" } ], "title": "Consolidation of global variables" } }
  4. Pour fusionner et fermer une demande d'extraction à l'aide de la stratégie de fusion tripartite, exécutez la commande merge-pull-request-by-three-way, en spécifiant les éléments suivants :

    • L'ID de la demande d'extraction (avec l'option --pull-request-id).

    • L'ID de validation complet de la pointe de la branche source (avec l'option--source-commit-id).

    • Le nom du référentiel (avec l'option --repository-name).

    • Le niveau de détails de conflit que vous souhaitez utiliser (avec l'option --conflict-detail-level). Si vous ne spécifiez rien, la valeur par défaut FILE_LEVEL est utilisée.

    • La stratégie de résolution des conflits que vous souhaitez utiliser (avec l'option --conflict-resolution-strategy). Si vous ne spécifiez rien, la valeur par défaut NONE est utilisée et les conflits doivent être résolus manuellement.

    • Le message de validation à inclure (avec l'option --commit-message).

    • Le nom à utiliser pour la validation (avec l'option --author-name).

    • L'adresse e-mail à utiliser pour la validation (avec l'option --email).

    • Si les dossiers vides doivent être conservés (avec l'option --keep-empty-folders).

    L'exemple suivant permet de fusionner et de fermer une demande d'extraction avec l'ID de l'adresse.47et un ID de validation source deExemple 99132 AB0dans un référentiel nomméMyDemoRepo. Il utilise les options par défaut pour le détail des conflits et la stratégie de résolution des conflits :

    aws codecommit merge-pull-request-by-three-way --pull-request-id 47 --source-commit-id 99132ab0EXAMPLE --repository-name MyDemoRepo --author-name "Maria Garcia" --email "maria_garcia@example.com" --commit-message "Merging pull request 47 by three-way with default options"

    Si elle aboutit, cette commande produit le même type de sortie qu’une fusion rapide, similaire à ce qui suit :

    { "pullRequest": { "approvalRules": [ { "approvalRuleContent": "{\"Version\": \"2018-11-08\",\"DestinationReferences\": [\"refs/heads/main\"],\"Statements\": [{\"Type\": \"Approvers\",\"NumberOfApprovalsNeeded\": 2,\"ApprovalPoolMembers\": [\"arn:aws:sts::123456789012:assumed-role/CodeCommitReview/*\"]}]}", "approvalRuleId": "dd8b17fe-EXAMPLE", "approvalRuleName": "2-approver-rule-for-main", "creationDate": 1571356106.936, "lastModifiedDate": 571356106.936, "lastModifiedUser": "arn:aws:iam::123456789012:user/Mary_Major", "originApprovalRuleTemplate": { "approvalRuleTemplateId": "dd8b17fe-EXAMPLE", "approvalRuleTemplateName": "2-approver-rule-for-main" }, "ruleContentSha256": "4711b576EXAMPLE" } ], "authorArn": "arn:aws:iam::123456789012:user/Li_Juan", "clientRequestToken": "", "creationDate": 1508530823.142, "description": "Review the latest changes and updates to the global variables", "lastActivityDate": 1508887223.155, "pullRequestId": "47", "pullRequestStatus": "CLOSED", "pullRequestTargets": [ { "destinationCommit": "9f31c968EXAMPLE", "destinationReference": "refs/heads/main", "mergeMetadata": { "isMerged": true, "mergedBy": "arn:aws:iam::123456789012:user/Mary_Major" }, "repositoryName": "MyDemoRepo", "sourceCommit": "99132ab0EXAMPLE", "sourceReference": "refs/heads/variables-branch" } ], "title": "Consolidation of global variables" } }