AWS CodeCommit 리포지토리의 풀 요청 병합 - AWS CodeCommit

AWS CodeCommit 신규 고객은 더 이상 사용할 수 없습니다. AWS CodeCommit 의 기존 고객은 정상적으로 서비스를 계속 이용할 수 있습니다. 자세히 알아보기

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

AWS CodeCommit 리포지토리의 풀 요청 병합

코드 검토가 완료되고 풀 요청의 모든 승인 규칙(있는 경우)이 충족되면 다음과 같은 여러 방법 중 하나로 풀 요청을 병합할 수 있습니다.

  • 콘솔에서 사용 가능한 병합 전략 중 하나를 사용하여 소스 브랜치를 대상 브랜치에 병합할 수 있습니다. 그러면 풀 요청도 종료됩니다. 또한 콘솔에서 병합 충돌을 해결할 수 있습니다. 콘솔에는 풀 요청이 병합 가능한지 또는 충돌을 해결해야 하는지 나타내는 메시지가 표시됩니다. 모든 충돌을 해결하고 병합을 선택하면 선택한 병합 전략을 사용하여 병합이 수행됩니다. fast-forward는 기본 병합 전략으로, Git에 대한 기본 옵션입니다. 소스 브랜치와 대상 브랜치의 코드 상태에 따라 그 전략의 사용이 불가능할 수 있지만, squash 또는 3방향 같은 다른 옵션을 사용할 수 있습니다.

  • AWS CLI를 사용하여 fast-forward, squash 또는 3방향 병합 전략을 통해 풀 요청을 병합하고 종료할 수 있습니다.

  • 로컬 컴퓨터에서 git merge 명령을 사용하여 대상 브랜치에 소스 브랜치를 병합한 다음 병합한 코드를 대상 브랜치에 푸시할 수 있습니다. 이 방법에는 신중하게 고려해야 할 단점이 있습니다. 풀 요청에 대한 승인 규칙의 요구 사항이 충족되었는지 여부에 관계없이 풀 요청을 병합하여 해당 컨트롤을 우회합니다. fast-forward 병합 전략을 사용하여 풀 요청을 병합하면 대상 브랜치를 병합하고 푸시할 때 자동으로 풀 요청도 종료됩니다. 이 방법의 한 가지 장점은 git merge 명령을 사용하여 CodeCommit 콘솔에서 사용할 수 없는 병합 옵션이나 전략을 선택할 수 있다는 것입니다. git merge 명령 및 병합 옵션에 대한 자세한 내용은 git-merge 또는 Git 설명서를 참조하십시오.

CodeCommit은 풀 요청의 소스 브랜치 또는 대상 브랜치가 삭제될 경우 풀 요청을 자동으로 종료합니다.

풀 요청 병합 (콘솔)

CodeCommit 콘솔을 사용하여 CodeCommit 리포지토리의 풀 요청을 병합할 수 있습니다. 풀 요청의 상태가 병합됨으로 변경된 후 미해결 풀 요청 목록에 더 이상 표시되지 않습니다. 병합된 풀 요청은 종결로 분류됩니다. 다시 미해결로 변경할 수는 없지만, 여전히 변경에 대한 설명을 남기고 설명에 댓글을 달 수 있습니다. 풀 요청이 병합되거나 종료된 후에는 해당 요청을 승인하거나 승인을 취소하거나 풀 요청에 적용된 승인 규칙을 재정의할 수 없습니다.

  1. https://console.aws.amazon.com/codesuite/codecommit/home에서 CodeCommit 콘솔을 엽니다.

  2. 리포지토리에서 리포지토리의 이름을 선택합니다.

  3. 탐색 창에서 풀 요청을 선택합니다.

  4. 기본적으로 모든 미해결 풀 요청 목록이 표시됩니다. 병합하려는 미해결 풀 요청을 선택합니다.

  5. 풀 요청에서 승인을 선택합니다. 승인자 목록을 검토하고 모든 승인 규칙(있는 경우)에서 해당 조건이 충족되었는지 확인합니다. 하나 이상의 승인 규칙이 상태가 규칙이 충족되지 않음인 경우 풀 요청을 병합할 수 없습니다. 아무도 풀 요청을 승인하지 않은 경우 병합할 것인지 또는 승인을 기다릴 것인지 고려하세요.

    참고

    풀 요청에 대한 승인 규칙을 생성한 경우 이를 편집하거나 삭제하여 병합 차단을 해제할 수 있습니다. 승인 규칙 템플릿을 사용하여 승인 규칙을 생성한 경우에는 편집하거나 삭제할 수 없습니다. 요구 사항을 재정의하도록 선택할 수만 있습니다. 자세한 내용은 풀 요청에 대한 승인 규칙 재정의 섹션을 참조하세요.

    한 승인 규칙에서 조건이 충족되지 않고 승인자 목록이 비어 있는 풀 요청입니다.
  6. 병합을 선택합니다.

  7. 풀 요청에서 사용 가능한 병합 전략 중에서 선택합니다. 적용할 수 없는 병합 전략은 회색으로 표시됩니다. 병합 전략을 사용할 수 없는 경우 CodeCommit 콘솔에서 충돌을 수동으로 해결하도록 선택하거나 Git 클라이언트를 사용하여 로컬로 충돌을 해결할 수 있습니다. 자세한 내용은 AWS CodeCommit 리포지토리에서 풀 요청의 충돌 해결 섹션을 참조하세요.

    CodeCommit 콘솔 내 병합에 사용 가능한 병합 전략을 보여주는 풀 요청.
    • fast-forward 병합은 대상 브랜치의 참조를 소스 브랜치의 가장 최근 커밋으로 전진시킵니다. 가능한 경우 이는 Git의 기본 동작입니다. 병합 커밋은 생성되지 않지만 소스 브랜치의 모든 커밋 이력이 마치 대상 브랜치에서 발생한 것처럼 유지됩니다. fast-forward 병합은 병합 커밋이 생성되지 않기 때문에 대상 브랜치 기록의 커밋 시각화 도우미 보기에 브랜치 병합으로 나타나지 않습니다. 소스 브랜치의 팁은 대상 브랜치의 팁으로 빠르게 넘어갑니다.

    • squash 병합은 소스 브랜치의 변경 내용을 포함하는 하나의 커밋을 생성하고 단일 squash된 커밋을 대상 브랜치에 적용합니다. 기본적으로 squash 커밋의 커밋 메시지에는 소스 브랜치의 변경 사항에 대한 모든 커밋 메시지가 포함됩니다. 브랜치 변경 내용의 개별 커밋 이력은 유지되지 않습니다. 이렇게 하면 대상 브랜치 이력의 커밋 시각화 도우미 보기에서 병합의 그래픽 표현을 유지하면서도 리포지토리 이력을 단순화할 수 있습니다.

    • 3방향 병합은 대상 브랜치의 병합을 위한 병합 커밋을 생성하지만 대상 브랜치 이력의 일환으로 소스 브랜치에서 실행된 개별 커밋도 유지합니다. 이렇게 하면 리포지토리 변경 내용의 완전한 이력을 유지할 수 있습니다.

  8. squash 또는 3방향 병합 전략을 선택하면 정보를 변경하려는 경우 자동으로 생성된 커밋 메시지를 검토하고 수정합니다. 커밋 이력에 대해 사용자의 이름과 이메일 주소를 추가합니다.

  9. (선택 사항) 병합의 일환으로 소스 브랜치를 삭제하는 옵션을 선택 취소합니다. 기본값은 풀 요청이 병합될 때 소스 브랜치를 삭제하는 것입니다.

  10. 풀 요청 병합을 선택하여 병합을 완료합니다.

풀 요청 병합 (AWS CLI)

CodeCommit에서 AWS CLI 명령을 사용하려면 AWS CLI를 설치합니다. 자세한 내용은 명령줄 참조 섹션을 참조하세요.

CodeCommit 리포지토리에서 AWS CLI를 사용하여 풀 요청을 병합하려면

  1. 풀 요청이 모든 승인 규칙이 충족되고 병합할 준비가 되었는지 여부를 평가하려면 다음을 지정하여 evaluate-pull-request-approval-rules 명령을 실행합니다.

    • 풀 요청의 ID(--pull-request-id 옵션 사용).

    • 풀 요청의 개정 ID(--revision-id option) 사용). get-pull-request 명령을 사용하여 풀 요청에 대한 현재 개정 ID를 가져올 수 있습니다.

    예를 들어 ID가 27이고 개정 ID가 9f29d167EXAMPLE인 풀 요청의 승인 규칙 상태를 평가하려면 다음과 같이 하십시오.

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

    이 명령이 제대로 실행되면 다음과 비슷하게 출력됩니다.

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

    이 출력은 한 승인 규칙의 요구 사항이 충족되지 않아 풀 요청을 병합할 수 없음을 나타냅니다. 이 풀 요청을 병합하려면 규칙의 조건을 충족하도록 검토자가 요청을 승인하도록 할 수 있습니다. 권한 및 규칙 생성 방법에 따라 규칙을 편집, 재정의 또는 삭제할 수도 있습니다. 자세한 내용은 풀 요청 검토, 풀 요청에 대한 승인 규칙 재정의, 풀 요청에 대한 승인 규칙 편집 또는 삭제 섹션을 참조하세요.

  2. fast-forward merge 전략을 사용하여 풀 요청을 병합하고 닫으려면 다음을 지정하여 merge-pull-request-by-fast-forward 명령을 실행합니다.

    • 풀 요청의 ID(--pull-request-id 옵션 사용).

    • 소스 브랜치 말단의 전체 커밋 ID(--source-commit-id 옵션 사용).

    • 리포지토리의 이름(--repository-name 옵션 사용)

    예를 들어, MyDemoRepo라는 리포지토리에서 ID가 47이고 소스 커밋 ID가 99132ab0EXAMPLE인 풀 요청을 병합하고 종료하려면 다음과 같이 합니다.

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

    이 명령이 제대로 실행되면 다음과 비슷하게 출력됩니다.

    { "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. squash 병합 전략을 사용하여 풀 요청을 병합하고 닫으려면 다음을 지정하여 merge-pull-request-by-squash 명령을 실행합니다.

    • 풀 요청의 ID(--pull-request-id 옵션 사용).

    • 소스 브랜치 말단의 전체 커밋 ID(--source-commit-id 옵션 사용).

    • 리포지토리의 이름(--repository-name 옵션 사용)

    • 사용하려는 충돌 세부 정보 수준(--conflict-detail-level 옵션 사용). 미지정된 경우 기본 FILE_LEVEL이 사용됩니다.

    • 사용하려는 충돌 해결 전략(--conflict-resolution-strategy 옵션 사용). 미지정된 경우 기본 설정은 NONE이며 충돌은 수동으로 해결해야 합니다.

    • 포함시킬 커밋 메시지(--commit-message 옵션 사용).

    • 커밋에 사용할 이름(--author-name 옵션 사용).

    • 커밋에 사용할 이메일 주소(--email 옵션 사용).

    • 빈 폴더의 유지 여부(--keep-empty-folders 옵션 사용).

    다음 예제에서는 MyDemoRepo라는 리포지토리에서 ID가 47이고 소스 커밋 ID가 99132ab0EXAMPLE인 풀 요청을 병합하고 종료합니다. 이 예제는 충돌 세부 사항에 LINE_LEVEL을 사용하고 충돌 해결 전략에 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"

    이 명령이 제대로 실행되면 다음과 유사한 fast-forward 병합의 출력과 같은 종류의 출력이 생성됩니다.

    { "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. 3방향 병합 전략을 사용하여 풀 요청을 병합하고 닫으려면 다음을 지정하여 merge-pull-request-by-three-way 명령을 실행합니다.

    • 풀 요청의 ID(--pull-request-id 옵션 사용).

    • 소스 브랜치 말단의 전체 커밋 ID(--source-commit-id 옵션 사용).

    • 리포지토리의 이름(--repository-name 옵션 사용)

    • 사용하려는 충돌 세부 정보 수준(--conflict-detail-level 옵션 사용). 미지정된 경우 기본 FILE_LEVEL이 사용됩니다.

    • 사용하려는 충돌 해결 전략(--conflict-resolution-strategy 옵션 사용). 미지정된 경우 기본 설정은 NONE이며 충돌은 수동으로 해결해야 합니다.

    • 포함시킬 커밋 메시지(--commit-message 옵션 사용).

    • 커밋에 사용할 이름(--author-name 옵션 사용).

    • 커밋에 사용할 이메일 주소(--email 옵션 사용).

    • 빈 폴더의 유지 여부(--keep-empty-folders 옵션 사용).

    다음 예제에서는 MyDemoRepo라는 리포지토리에서 ID가 47이고 소스 커밋 ID가 99132ab0EXAMPLE인 풀 요청을 병합하고 종료합니다. 이 예제는 충돌 세부 정보 및 충돌 해결 전략에 기본 옵션을 사용합니다.

    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"

    이 명령이 제대로 실행되면 다음과 유사한 fast-forward 병합의 출력과 같은 종류의 출력이 생성됩니다.

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