Combinación de una solicitud de extracción en un repositorio de AWS CodeCommit - AWS CodeCommit

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Combinación de una solicitud de extracción en un repositorio de AWS CodeCommit

Una vez que se haya revisado el código y se hayan satisfecho todas las reglas de aprobación (si las hay) de la solicitud de extracción, puede combinar una solicitud de extracción de varias maneras:

  • Puede usar la consola para combinar automáticamente la ramificación de origen con la de destino utilizando una de las estrategias de fusión disponibles, que también cierra la solicitud de extracción. También puede resolver cualquier conflicto de combinación en la consola. La consola muestra un mensaje que indica si la solicitud de extracción se puede combinar o si se deben resolver conflictos. Cuando se resuelven todos los conflictos y se elige Merge (Combinar), la combinación se realiza utilizando la estrategia de combinación que se elija. El avance rápido es la estrategia de combinación predeterminada, que es la opción predeterminada para Git. Según el estado del código en la ramificación de origen y en la de destino, esta estrategia podría no estar disponible, pero sí otras opciones, como, por ejemplo, combinación de squash o de tres modos.

  • Puede usar la AWS CLI para combinar y cerrar la solicitud de extracción mediante la estrategia de combinación de avance rápido, squash o tres modos.

  • En el equipo local, puede utilizar el comando git merge para combinar la ramificación de origen con la de destino y, a continuación, enviar el código combinado a la ramificación de destino. Este enfoque presenta algunos inconvenientes que es importante considerar cuidadosamente. Combina la solicitud de extracción independientemente de si se han cumplido los requisitos de las normas de aprobación de la solicitud de extracción, eludiendo esos controles. La combinación y la inserción de la ramificación de destino también cierra la solicitud de extracción automáticamente si esta última se combina mediante la estrategia de combinación de avance rápido. Una ventaja de este enfoque es que el comando git merge le permite elegir opciones de combinación o estrategias que no están disponibles en la consola de CodeCommit. Para obtener más información acerca de git merge y las opciones de combinación, consulte git-merge o la documentación de Git.

CodeCommit cierra automáticamente una solicitud de extracción si se elimina la ramificación de origen o de destino de la solicitud de extracción.

Combinación de una solicitud de extracción (consola)

Puede utilizar la consola de CodeCommit para fusionar una solicitud de extracción en un repositorio de CodeCommit. Después de que el estado de una solicitud de extracción cambie a Merged (Combinado), ya no aparece en la lista de las solicitudes de extracción abiertas. Una solicitud de extracción combinada se clasifica como cerrada. No se puede cambiar de nuevo a Open (Abrir), aunque los usuarios pueden seguir realizando comentarios sobre los cambios y respondiendo a los comentarios. Después de combinar o cerrar una solicitud de extracción, no se puede aprobar, revocar la aprobación para ella ni sustituir las reglas de aprobación aplicadas a la solicitud de extracción.

  1. Abra la consola de CodeCommit en https://console.aws.amazon.com/codesuite/codecommit/home.

  2. En Repositories (Repositorios), seleccione el nombre del repositorio.

  3. En el panel de navegación, seleccione Pull requests (Solicitudes de extracción).

  4. De forma predeterminada, se muestra una lista de todas las solicitudes de extracción abiertas. Elija la solicitud de extracción abierta que desea combinar.

  5. En la solicitud de extracción, elija Approvals (Aprobaciones). Revise la lista de aprobadores y compruebe que se cumplan las condiciones de todas las reglas de aprobación (si las hay). No se puede combinar una solicitud de extracción si una o varias reglas de aprobación tienen el estado Rule not satisfied (Regla no cumplida). Si nadie ha aprobado la solicitud de extracción, considere si desea combinarla o si desea esperar las aprobaciones.

    nota

    Si se creó una regla de aprobación para una solicitud de extracción, puede editarla o eliminarla para desbloquear la combinación. Si la regla de aprobación se creó con una plantilla de regla de aprobación, no puede editarla ni eliminarla. Solo podrá optar por anular los requisitos. Para obtener más información, consulte Anular reglas de aprobación en una solicitud de extracción.

    Solicitud de extracción que muestra una regla de aprobación cuyas condiciones no se han cumplido y una lista vacía de aprobadores.
  6. Elija Merge (Combinar).

  7. En la solicitud de extracción, elija entre las estrategias de combinación disponibles. Las estrategias de combinación que no se pueden aplicar aparecen atenuadas. Si no hay más estrategias de combinación disponibles, puede elegir resolver los conflictos manualmente en la consola de CodeCommit o puede resolverlos localmente mediante su cliente de Git. Para obtener más información, consulte Resolver conflictos en una solicitud de extracción en un repositorio de AWS CodeCommit.

    Una solicitud de extracción que muestra las estrategias de combinación disponibles para la combinación en la consola de CodeCommit.
    • Una combinación de avance rápido avanza la referencia para la ramificación de destino a la confirmación más reciente de la ramificación de origen. Este es el comportamiento predeterminado de Git cuando es posible. No se crea ninguna confirmación de combinación, pero todo el historial de confirmaciones de la ramificación de origen se conserva como si hubiera ocurrido en la ramificación de destino. Las combinaciones de avance rápido no aparecen como una combinación de ramificaciones en la vista del visualizador de confirmaciones del historial de la ramificación de destino, porque no se crea ninguna confirmación de combinación. El extremo de la ramificación de origen se reenvía rápidamente al extremo de la ramificación de destino.

    • Una combinación de squash crea una confirmación que contiene los cambios en la ramificación de origen y aplica dicha confirmación de squash única a la ramificación de destino. De forma predeterminada, el mensaje de confirmación de dicha confirmación de squash contiene todos los mensajes de confirmación de los cambios en la ramificación de origen. No se conserva ningún historial de confirmaciones individuales de los cambios de la ramificación. Esto puede ayudar a simplificar el historial del repositorio conservando una representación gráfica de la combinación en la vista del visualizador de confirmación del historial de la ramificación de destino.

    • Una combinación de tres modos crea una confirmación de combinación para la combinación en la ramificación de destino, pero también conserva las confirmaciones individuales realizadas en la ramificación de origen como parte del historial de la ramificación de destino. Esto puede ayudar a mantener un historial completo de los cambios en al repositorio.

  8. Si elige la estrategia de combinación de squash o tres modos, revise el mensaje de confirmación generado automáticamente y modifíquelo si desea cambiar la información. Añada el nombre y la dirección de correo electrónico para el historial de confirmaciones.

  9. (Opcional) Anule la selección de la opción para eliminar la ramificación de origen como parte de la combinación. De forma predeterminada, se eliminar la ramificación de origen cuando se combina una solicitud de extracción.

  10. Elija Merge pull request (Combinar solicitud de extracción) para completar la combinación.

Combinar una solicitud de extracción (AWS CLI)

Para utilizar los comandos de AWS CLI en CodeCommit, instale la AWS CLI. Para obtener más información, consulte Referencia de la línea de comandos.

Para usar la AWS CLI para fusionar solicitudes de extracción en un repositorio de CodeCommit

  1. Para evaluar si una solicitud de extracción ha cumplido todas sus reglas de aprobación y está lista para combinarla, ejecute el comando evaluate-pull-request-approval-rules especificando lo siguiente:

    • El ID de la solicitud de extracción (con la opción --pull-request-id).

    • El ID de revisión de la solicitud de extracción (mediante --revision-id option)). Puede obtener el ID de revisión actual de una solicitud de extracción mediante el comando get-pull-request.

    Por ejemplo, para evaluar el estado de las reglas de aprobación en una solicitud de extracción con el ID 27 y el ID de revisión 9f29d167EXAMPLE:

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

    Si se ejecuta correctamente, el resultado del comando será similar al siguiente:

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

    Este resultado indica que una solicitud de extracción no se puede combinar porque no se han cumplido los requisitos de una regla de aprobación. Para combinar esta solicitud de extracción, puede hacer que los revisores la aprueben para que cumpla las condiciones de la regla. Dependiendo de sus permisos y de cómo se creó la regla, es posible que también pueda editarla, anularla o eliminarla. Para obtener más información, consulte Revisión de una solicitud de extracción, Anular reglas de aprobación en una solicitud de extracción y Editar o eliminar una regla de aprobación para una solicitud de extracción.

  2. Para combinar y cerrar una solicitud de extracción utilizando la estrategia de combinación de avance rápido, ejecute el comando merge-pull-request-by-fast-forward, especificando:

    • El ID de la solicitud de extracción (con la opción --pull-request-id).

    • El ID completo de la confirmación en el extremo de la ramificación de origen (con la opción --source-commit-id).

    • El nombre del repositorio (con la opción --repository-name).

    Por ejemplo, para combinar y cerrar una solicitud de extracción con el ID 47 y el ID de confirmación de origen 99132ab0EXAMPLE en un repositorio llamado MyDemoRepo:

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

    Si se ejecuta correctamente, el resultado del comando será similar al siguiente:

    { "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. Para combinar y cerrar una solicitud de extracción mediante la estrategia de combinación de squash, ejecute el comando merge-pull-request-by-squash, especificando:

    • El ID de la solicitud de extracción (con la opción --pull-request-id).

    • El ID completo de la confirmación en el extremo de la ramificación de origen (con la opción --source-commit-id).

    • El nombre del repositorio (con la opción --repository-name).

    • El nivel de detalle de conflictos que desea utilizar (con la opción --conflict-detail-level). Si no se especifica, se utiliza el FILE_LEVEL predeterminado.

    • La estrategia de resolución de conflictos que desea utilizar (con la opción --conflict-resolution-strategy). Si no se especifica, toma de forma predeterminada el valor NONE y los conflictos deben resolverse manualmente.

    • El mensaje de confirmación que incluir (con la opción --commit-message).

    • El nombre que se utilizará para la confirmación (con la opción --author-name).

    • La dirección de correo electrónico que se va a utilizar para la confirmación (con la opción --email).

    • Si desea mantener cualquier carpeta vacía (con la opción --keep-empty-folders).

    En el ejemplo siguiente se combina y cierra una solicitud de extracción con el ID 47 y el ID de confirmación de origen 99132ab0EXAMPLE en un repositorio denominado MyDemoRepo. Utiliza los detalles de conflictos LINE_LEVEL y la estrategia de resolución de conflictos de 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 se ejecuta correctamente, este comando produce el mismo tipo de salida que la combinación de avance rápido, un resultado similar al siguiente:

    { "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. Para combinar y cerrar una solicitud de extracción mediante estrategia de combinación de tres modos, ejecute el comando merge-pull-request-by-three-way, especificando:

    • El ID de la solicitud de extracción (con la opción --pull-request-id).

    • El ID completo de la confirmación en el extremo de la ramificación de origen (con la opción --source-commit-id).

    • El nombre del repositorio (con la opción --repository-name).

    • El nivel de detalle de conflictos que desea utilizar (con la opción --conflict-detail-level). Si no se especifica, se utiliza el FILE_LEVEL predeterminado.

    • La estrategia de resolución de conflictos que desea utilizar (con la opción --conflict-resolution-strategy). Si no se especifica, toma de forma predeterminada el valor NONE y los conflictos deben resolverse manualmente.

    • El mensaje de confirmación que incluir (con la opción --commit-message).

    • El nombre que se utilizará para la confirmación (con la opción --author-name).

    • La dirección de correo electrónico que se va a utilizar para la confirmación (con la opción --email).

    • Si desea mantener cualquier carpeta vacía (con la opción --keep-empty-folders).

    En el ejemplo siguiente se combina y cierra una solicitud de extracción con el ID 47 y el ID de confirmación de origen 99132ab0EXAMPLE en un repositorio denominado MyDemoRepo. Utiliza las opciones predeterminadas para los detalles de conflictos y la estrategia de resolución de conflictos:

    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 se ejecuta correctamente, este comando produce el mismo tipo de salida que la combinación de avance rápido, de forma similar a como se muestra a continuación:

    { "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" } }