Résolution des conflits dans une demande d'extraction dans unAWS CodeCommitréférentiel - AWS CodeCommit

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.

Résolution des conflits dans une demande d'extraction dans unAWS CodeCommitréférentiel

Si votre demande d'extraction présente des conflits et ne peut pas être fusionnée, vous pouvez essayer de résoudre les conflits de diverses manières :

  • Sur votre ordinateur local, vous pouvez utiliser la commande git diff pour rechercher les conflits entre les deux branches et apporter des modifications afin de les résoudre. Vous pouvez également utiliser un outil de recherche de différences ou un autre logiciel pour vous aider à trouver et à résoudre les différences. Une fois les différences résolues, vous pouvez transmettre votre branche source avec les modifications contenant les conflits résolus, ce qui met à jour la demande d'extraction. Pour plus d'informations sur git diff et git difftool, consultez la documentation Git.

  • Dans la console, vous pouvez choisir Resolve conflicts (Résoudre les conflits). Cette option permet d'ouvrir un éditeur de texte brut qui affiche les conflits de la même manière que la commande git diff. Vous pouvez examiner manuellement les conflits dans chaque fichier concerné, apporter des modifications, puis mettre à jour la demande d'extraction avec vos modifications.

  • Dans l’AWS CLI, vous pouvez utiliser l’AWS CLI pour obtenir des informations sur les conflits de fusion et créer une validation de fusion non référencée à des fins de test.

Résolution des conflits dans une pull request (console)

Vous pouvez utiliser la console CodeCommit pour résoudre les conflits dans une demande d'extraction dans un référentiel CodeCommit.

  1. Ouvrez la console CodeCommit, à l'adressehttps://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, mais qui contient des conflits.

  5. Dans la demande d'extraction, choisissez Resolve conflicts (Résoudre les confits). Cette option s'affiche uniquement s'il existe des conflits qui doivent être résolus avant que la demande d'extraction puisse être fusionnée.

    Une demande d'extraction qui présente des conflits devant être résolus avant sa fusion.
  6. Une fenêtre de résolution des conflits s’ouvre et répertorie chaque fichier présentant des conflits qui doivent être résolus. Choisissez chaque fichier dans la liste pour examiner les conflits et apportez toutes les modifications nécessaires jusqu'à ce que l’ensemble des conflits soient résolus.

    L’éditeur de résolution des conflits affichant un fichier avec des conflits n'ayant pas encore été résolus.
    • Vous pouvez choisir d'utiliser le contenu du fichier source, le contenu du fichier de destination ou, s’il ne s’agit pas d’un fichier binaire, de modifier manuellement le contenu d'un fichier de sorte qu’il contienne uniquement les modifications souhaitées. Des marqueurs de différence git standard sont utilisés pour indiquer les conflits entre les branches source et de destination (HEAD) dans le fichier.

    • Dans le cas d’un fichier binaire, d’un sous-module Git ou d’un conflit de nom de fichier/dossier, vous devez choisir d'utiliser le fichier source ou le fichier de destination pour résoudre le conflit. Vous ne pouvez pas afficher ou modifier des fichiers binaires dans la console CodeCommit.

    • En cas de conflit de mode de fichier, vous verrez l'option pour résoudre ce conflit en choisissant entre le mode de fichier du fichier source et le mode de fichier du fichier de destination.

    • Si vous décidez d’annuler vos modifications pour un fichier et le restaurer à son état conflictuel, choisissez Reset file (Réinitialiser le fichier). Cela vous permet de résoudre les conflits de manière différente.

  7. Lorsque vous êtes satisfait de vos modifications, choisissez Update pull request (Mettre à jour la demande d'extraction).

    Note

    Vous devez résoudre tous les conflits dans tous les fichiers avant de pouvoir mettre à jour correctement la demande d'extraction avec vos modifications.

  8. La demande d'extraction est mise à jour avec vos modifications et peut être fusionnée. La page permettant de procéder à la fusion s'affiche. Vous pouvez choisir de fusionner la demande d'extraction à ce stade, ou vous pouvez revenir à la liste des demandes d'extraction.

Résolution des conflits dans 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.

Pas simpleAWS CLIpermet de résoudre les conflits dans une demande d'extraction et de fusionner cette demande. Cependant, vous pouvez utiliser des commandes individuelles pour détecter les conflits, essayez de les résoudre et tester si une demande d'extraction peut être fusionnée. Vous pouvez utiliser :

  • get-merge-options, pour déterminer les options disponibles pour fusionner deux spécificateurs de validation.

  • get-merge-conflicts, pour renvoyer une liste de fichiers avec les conflits de fusion dans une fusion entre deux spécificateurs de validation.

  • batch-describe-merge-conflicts, pour obtenir des informations sur tous les conflits de fusion de fichiers d’une fusion entre deux validations utilisant une stratégie de fusion spécifiée.

  • describe-merge-conflicts, pour obtenir des informations détaillées sur les conflits de fusion pour un fichier spécifique entre deux validations utilisant une stratégie de fusion spécifiée.

  • create-unreferenced-merge-commit, pour tester le résultat de la fusion de deux spécificateurs de validation avec une stratégie de fusion spécifiée.

  1. Pour découvrir les options de fusion disponibles pour une fusion entre deux spécificateurs de validation, exécutez la commande get-merge-options, en spécifiant les éléments suivants :

    • Un spécificateur de validation pour la source de la fusion (avec l' option --source-commit-specifier).

    • Un spécificateur de validation de la destination de la fusion (avec l'option --destination-commit-specifier).

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

    • (Facultatif) Une stratégie de résolution des conflits à utiliser (avec l'option --conflict-resolution-strategy).

    • (Facultatif) Le niveau de détails voulu sur les conflits (avec l'option --conflict-detail-level).

    Par exemple, pour déterminer les stratégies de fusion disponibles pour fusionner une branche source nomméebugfix vpce-1234avec une branche de destination nomméeprincipaldans un référentiel nomméMyDemoRepo :

    aws codecommit get-merge-options --source-commit-specifier bugfix-1234 --destination-commit-specifier main --repository-name MyDemoRepo

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

    { "mergeOptions": [ "FAST_FORWARD_MERGE", "SQUASH_MERGE", "THREE_WAY_MERGE" ], "sourceCommitId": "d49940adEXAMPLE", "destinationCommitId": "86958e0aEXAMPLE", "baseCommitId": "86958e0aEXAMPLE" }
  2. Pour obtenir une liste des fichiers contenant des conflits de fusion dans une fusion entre deux spécificateurs de validation, exécutez la commande get-merge-conflicts, en spécifiant les éléments suivants :

    • Un spécificateur de validation pour la source de la fusion (avec l' option --source-commit-specifier).

    • Un spécificateur de validation de la destination de la fusion (avec l'option --destination-commit-specifier).

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

    • L'option de fusion que vous souhaitez utiliser (avec l'option --merge-option).

    • (Facultatif) Le niveau de détails voulu sur les conflits (avec l'option --conflict-detail-level).

    • (Facultatif) Une stratégie de résolution des conflits à utiliser (avec l'option --conflict-resolution-strategy).

    • (Facultatif) Le nombre maximum de fichiers contenant des conflits à renvoyer (avec l'option --max-conflict-files).

    Par exemple, pour obtenir la liste des fichiers contenant des conflits dans une fusion entre une branche source nommée feature-randomizationfeature et une branche de destination nommée main utilisant la stratégie de fusion tripartite dans un référentiel nommé MyDemoRepo :

    aws codecommit get-merge-conflicts --source-commit-specifier feature-randomizationfeature --destination-commit-specifier main --merge-option THREE_WAY_MERGE --repository-name MyDemoRepo

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

    { "mergeable": false, "destinationCommitId": "86958e0aEXAMPLE", "sourceCommitId": "6ccd57fdEXAMPLE", "baseCommitId": "767b6958EXAMPLE", "conflictMetadataList": [ { "filePath": "readme.md", "fileSizes": { "source": 139, "destination": 230, "base": 85 }, "fileModes": { "source": "NORMAL", "destination": "NORMAL", "base": "NORMAL" }, "objectTypes": { "source": "FILE", "destination": "FILE", "base": "FILE" }, "numberOfConflicts": 1, "isBinaryFile": { "source": false, "destination": false, "base": false }, "contentConflict": true, "fileModeConflict": false, "objectTypeConflict": false, "mergeOperations": { "source": "M", "destination": "M" } } ] }
  3. Pour obtenir des informations sur les conflits de fusion dans tous les fichiers ou dans un sous-ensemble de fichiers d’une fusion entre deux spécificateurs de validation, exécutez la commande batch-describe-merge-conflicts, en spécifiant les éléments suivants :

    • Un spécificateur de validation pour la source de la fusion (avec l' option --source-commit-specifier).

    • Un spécificateur de validation de la destination de la fusion (avec l'option --destination-commit-specifier).

    • L'option de fusion que vous souhaitez utiliser (avec l'option --merge-option).

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

    • (Facultatif) Une stratégie de résolution des conflits à utiliser (avec l'option --conflict-resolution-strategy).

    • (Facultatif) Le niveau de détails voulu sur les conflits (avec l'option --conflict-detail-level).

    • (Facultatif) Le nombre maximum de morceaux de fusion à renvoyer (avec l'option --max-merge-hunks).

    • (Facultatif) Le nombre maximum de fichiers contenant des conflits à renvoyer (avec l'option --max-conflict-files).

    • (Facultatif) Le chemin de fichiers cibles à utiliser pour décrire les conflits (avec l'option --file-paths).

    Par exemple, pour déterminer les conflits de fusion pour fusionner une branche source nomméefonction de randomisationavec une branche de destination nomméeprincipalUtilisation de laTHREE_WAY_MERGEstratégie dans un référentiel nomméMyDemoRepo :

    aws codecommit batch-describe-merge-conflicts --source-commit-specifier feature-randomizationfeature --destination-commit-specifier main --merge-option THREE_WAY_MERGE --repository-name MyDemoRepo

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

    { "conflicts": [ { "conflictMetadata": { "filePath": "readme.md", "fileSizes": { "source": 139, "destination": 230, "base": 85 }, "fileModes": { "source": "NORMAL", "destination": "NORMAL", "base": "NORMAL" }, "objectTypes": { "source": "FILE", "destination": "FILE", "base": "FILE" }, "numberOfConflicts": 1, "isBinaryFile": { "source": false, "destination": false, "base": false }, "contentConflict": true, "fileModeConflict": false, "objectTypeConflict": false, "mergeOperations": { "source": "M", "destination": "M" } }, "mergeHunks": [ { "isConflict": true, "source": { "startLine": 0, "endLine": 3, "hunkContent": "VGhpcyBpEXAMPLE==" }, "destination": { "startLine": 0, "endLine": 1, "hunkContent": "VXNlIHRoEXAMPLE=" } } ] } ], "errors": [], "destinationCommitId": "86958e0aEXAMPLE", "sourceCommitId": "6ccd57fdEXAMPLE", "baseCommitId": "767b6958EXAMPLE" }
  4. Pour obtenir des informations détaillées sur n'importe quel conflit de fusion pour un fichier spécifique dans une fusion entre deux spécificateurs de validation, exécutez la commande describe-merge-conflicts, en spécifiant les éléments suivants :

    • Un spécificateur de validation pour la source de la fusion (avec l' option --source-commit-specifier).

    • Un spécificateur de validation de la destination de la fusion (avec l'option --destination-commit-specifier).

    • L'option de fusion que vous souhaitez utiliser (avec l'option --merge-option).

    • Le chemin du fichier cible à utiliser pour décrire les conflits (avec l'option --file-path).

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

    • (Facultatif) Une stratégie de résolution des conflits à utiliser (avec l'option --conflict-resolution-strategy).

    • (Facultatif) Le niveau de détails voulu sur les conflits (avec l'option --conflict-detail-level).

    • (Facultatif) Le nombre maximum de morceaux de fusion à renvoyer (avec l'option --max-merge-hunks).

    • (Facultatif) Le nombre maximum de fichiers contenant des conflits à renvoyer (avec l'option --max-conflict-files).

    Par exemple, pour déterminer les conflits de fusion pour un fichier nomméreadme.mddans une branche source nomméefonction de randomisationavec une branche de destination nomméeprincipalUtilisation de laTHREE_WAY_MERGEstratégie dans un référentiel nomméMyDemoRepo :

    aws codecommit describe-merge-conflicts --source-commit-specifier feature-randomizationfeature --destination-commit-specifier main --merge-option THREE_WAY_MERGE --file-path readme.md --repository-name MyDemoRepo

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

    { "conflictMetadata": { "filePath": "readme.md", "fileSizes": { "source": 139, "destination": 230, "base": 85 }, "fileModes": { "source": "NORMAL", "destination": "NORMAL", "base": "NORMAL" }, "objectTypes": { "source": "FILE", "destination": "FILE", "base": "FILE" }, "numberOfConflicts": 1, "isBinaryFile": { "source": false, "destination": false, "base": false }, "contentConflict": true, "fileModeConflict": false, "objectTypeConflict": false, "mergeOperations": { "source": "M", "destination": "M" } }, "mergeHunks": [ { "isConflict": true, "source": { "startLine": 0, "endLine": 3, "hunkContent": "VGhpcyBpEXAMPLE==" }, "destination": { "startLine": 0, "endLine": 1, "hunkContent": "VXNlIHRoEXAMPLE=" } } ], "destinationCommitId": "86958e0aEXAMPLE", "sourceCommitId": "6ccd57fdEXAMPLE", "baseCommitId": "767b69580EXAMPLE" }
  5. Pour créer une validation non référencée qui représente le résultat de la fusion de deux spécificateurs de validation, exécutez la commande create-unreferenced-merge-commit, en spécifiant les éléments suivants :

    • Un spécificateur de validation pour la source de la fusion (avec l' option --source-commit-specifier).

    • Un spécificateur de validation de la destination de la fusion (avec l'option --destination-commit-specifier).

    • L'option de fusion que vous souhaitez utiliser (avec l'option --merge-option).

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

    • (Facultatif) Une stratégie de résolution des conflits à utiliser (avec l'option --conflict-resolution-strategy).

    • (Facultatif) Le niveau de détails voulu sur les conflits (avec l'option --conflict-detail-level).

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

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

    • (Facultatif) 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).

    Par exemple, pour déterminer les conflits de fusion pour fusionner une branche source nomméebugfix vpce-1234avec une branche de destination nomméeprincipalutilisation de la stratégie ACCEPT_SOURCE dans un référentiel nomméMyDemoRepo :

    aws codecommit create-unreferenced-merge-commit --source-commit-specifier bugfix-1234 --destination-commit-specifier main --merge-option THREE_WAY_MERGE --repository-name MyDemoRepo --name "Maria Garcia" --email "maria_garcia@example.com" --commit-message "Testing the results of this merge."

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

    { "commitId": "4f178133EXAMPLE", "treeId": "389765daEXAMPLE" }