AWS CodeCommit 리포지토리에서 풀 요청의 충돌 해결 - AWS CodeCommit

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

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

AWS CodeCommit 리포지토리에서 풀 요청의 충돌 해결

풀 요청에 충돌이 발생하여 풀 요청을 병합할 수 없는 경우 다음 방법 중 하나를 사용하여 충돌의 해결을 시도할 수 있습니다.

  • 로컬 컴퓨터에서 git diff 명령을 사용하여 2개 브랜치 간의 충돌을 확인하고 충돌을 해결하도록 변경할 수 있습니다. 또한 차이점 도구나 기타 소프트웨어를 사용하여 차이점을 확인하고 해결할 수 있습니다. 충돌을 만족할 수 있을 정도로 해결한 후 해결된 충돌을 포함하는 변경 사항으로 소스 브랜치를 푸시할 수 있으며, 풀 요청이 업데이트됩니다. git diffgit difftool에 대한 자세한 내용은 Git 설명서를 참조하세요.

  • 콘솔에서 충돌 해결을 선택할 수 있습니다. 이렇게 하면 git diff 명령과 비슷한 방법으로 충돌을 보여주는 일반 텍스트 편집기가 열립니다. 충돌을 포함하는 각 파일의 충돌을 수동으로 검토하고 변경을 실시한 다음 변경 사항으로 pull 요청을 업데이트할 수 있습니다.

  • AWS CLI에서 AWS CLI를 사용하여 병합 충돌에 대한 정보를 얻고 참조되지 않은 병합 커밋을 생성하여 병합을 테스트할 수 있습니다.

풀 요청의 충돌 해결 (콘솔)

CodeCommit 콘솔을 사용하여 CodeCommit 리포지토리의 풀 요청을 해결할 수 있습니다.

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

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

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

  4. 기본적으로 모든 미해결 풀 요청 목록이 표시됩니다. 병합하려는 미해결 풀 요청을 선택합니다. 이 요청에는 충돌이 포함되어 있습니다.

  5. 풀 요청에서 충돌 해결을 선택합니다. 이 옵션은 풀 요청을 병합할 수 있기 전에 해결해야 할 충돌이 있는 경우에만 나타납니다.

    풀 요청을 병합할 수 있기 전에 해결해야 할 충돌이 있음을 보여주는 풀 요청.
  6. 충돌 해결 창이 해결해야 할 충돌이 있는 각 파일 목록을 엽니다. 목록에서 충돌을 검토할 각 파일을 선택하고 모든 충돌이 해결될 때까지 필요한 변경을 실시합니다.

    아직 해결되지 않은 충돌이 있는 파일을 보여주는 충돌 해결 편집기.
    • 소스 파일 콘텐츠, 대상 파일 콘텐츠를 사용하도록 선택하거나 파일이 이진 파일이 아닌 경우 원하는 변경 사항만 포함되도록 파일의 콘텐츠를 수동으로 편집하도록 선택할 수 있습니다. 표준 git 차이점 마커는 파일의 대상(HEAD) 브랜치와 소스 브랜치 간의 충돌을 표시하는 데 사용됩니다.

    • 파일이 이진 파일, Git 하위 모듈이거나 파일/폴더 이름 충돌이 있는 경우 충돌을 해결하기 위해 소스 파일 또는 대상 파일을 사용하도록 선택해야 합니다. CodeCommit 콘솔에서는 이진 파일을 보거나 편집할 수 없습니다.

    • 파일 모드 충돌이 있는 경우 소스 파일의 파일 모드와 대상 파일의 파일 모드 중에서 선택하여 충돌을 해결하는 옵션이 표시됩니다.

    • 파일의 변경 사항을 폐기하고 파일을 충돌 상태로 복원하려면 파일 재설정을 선택합니다. 이렇게 하면 다른 방법으로 충돌을 해결할 수 있습니다.

  7. 변경 사항에 만족하면 풀 요청 업데이트를 선택합니다.

    참고

    변경 사항으로 풀 요청을 성공적으로 업데이트할 수 있기 전에 모든 파일의 모든 충돌을 해결해야 합니다.

  8. 풀 요청은 변경 사항으로 업데이트되며 병합 가능합니다. 병합 페이지가 표시됩니다. 이 시점에 풀 요청을 병합하도록 선택하거나 풀 요청 목록으로 돌아갈 수 있습니다.

풀 요청의 충돌 해결 (AWS CLI)

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

단일 AWS CLI 명령으로는 풀 요청의 충돌을 해결하고 해당 요청을 병합할 수 없습니다. 그러나 개별 명령들을 사용하여 충돌을 확인하고 충돌의 해결을 시도하며 풀 요청의 병합 가능 여부를 테스트할 수 있습니다. 다음을 수행할 수 있습니다.

  • get-merge-options를 사용하여 2개 커밋 지정자 간의 병합에 사용 가능한 병합 옵션을 알아볼 수 있습니다.

  • get-merge-conflicts를 사용하여 2개 커밋 지정자 간의 병합에서 병합 충돌이 있는 파일 목록을 반환할 수 있습니다.

  • batch-describe-merge-conflicts를 사용하여, 지정된 병합 전략을 사용하는 2개 커밋 간의 병합에서 파일의 모든 병합 충돌에 대한 정보를 얻을 수 있습니다.

  • describe-merge-conflicts를 사용하여, 지정된 병합 전략을 사용하는 2개 커밋 간의 특정 파일의 병합 충돌에 대한 세부 정보를 얻을 수 있습니다.

  • create-unreferenced-merge-commit를 사용하여, 지정된 병합 전략을 사용하는 2개 커밋 지정자의 병합 결과를 테스트할 수 있습니다.

  1. 2개 커밋 지정자 간의 병합에 사용 가능한 병합 옵션을 확인하려면 다음을 지정하여 get-merge-options 명령을 실행합니다.

    • 병합 소스의 커밋 지정자(--source-commit-specifier 옵션 사용)

    • 병합 대상의 커밋 지정자(--destination-commit-specifier 옵션 사용).

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

    • (선택 사항) 사용하려는 충돌 해결 전략(--conflict-resolution-strategy 옵션 사용).

    • (선택 사항) 충돌에 대해 원하는 세부 사항 수준(--conflict-detail-level 옵션 사용).

    예를 들어, MyDemoRepo라는 리포지토리에서 bugfix-1234라는 소스 브랜치를 main이라는 대상 브랜치와 병합하는 데 활용할 수 있는 병합 전략을 결정하려면, 다음과 같이 하십시오.

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

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

    { "mergeOptions": [ "FAST_FORWARD_MERGE", "SQUASH_MERGE", "THREE_WAY_MERGE" ], "sourceCommitId": "d49940adEXAMPLE", "destinationCommitId": "86958e0aEXAMPLE", "baseCommitId": "86958e0aEXAMPLE" }
  2. 2개 커밋 지정자 간의 병합에서 병합 충돌을 포함하는 파일 목록을 얻으려면 다음을 지정하여 get-merge-conflicts 명령을 실행합니다.

    • 병합 소스의 커밋 지정자(--source-commit-specifier 옵션 사용)

    • 병합 대상의 커밋 지정자(--destination-commit-specifier 옵션 사용).

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

    • 사용하려는 병합 옵션(--merge-option 옵션 사용)

    • (선택 사항) 충돌에 대해 원하는 세부 사항 수준(--conflict-detail-level 옵션 사용).

    • (선택 사항) 사용하려는 충돌 해결 전략(--conflict-resolution-strategy 옵션 사용).

    • (선택 사항) 반환할 충돌이 있는 파일의 최대 수(--max-conflict-files 옵션 사용).

    예를 들어 MyDemoRepo라는 리포지토리에서 three-way merge(삼방향 병합 전략)을 사용하여 feature-randomizationfeature라는 소스 브랜치와 main이라는 대상 브랜치 간의 병합에서 충돌을 포함하는 파일 목록을 얻으려면 다음을 수행합니다.

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

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

    { "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. 2개 커밋 지정자 간의 병합에서 모든 파일 또는 파일 하위 집합의 병합 충돌에 대한 정보를 얻으려면 다음을 지정하여 batch-describe-merge-conflicts 명령을 실행합니다.

    • 병합 소스의 커밋 지정자(--source-commit-specifier 옵션 사용)

    • 병합 대상의 커밋 지정자(--destination-commit-specifier 옵션 사용).

    • 사용하려는 병합 옵션(--merge-option 옵션 사용)

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

    • (선택 사항) 사용하려는 충돌 해결 전략(--conflict-resolution-strategy 옵션 사용).

    • (선택 사항) 충돌에 대해 원하는 세부 사항 수준(--conflict-detail-level 옵션 사용).

    • (선택 사항) 반환할 병합 헝크의 최대 수(--max-merge-hunks 옵션 사용).

    • (선택 사항) 반환할 충돌이 있는 파일의 최대 수(--max-conflict-files 옵션 사용).

    • (선택 사항) 충돌을 설명하는 데 사용하기 위한 대상 파일의 경로(--file-paths 옵션 사용).

    예를 들어, MyDemoRepo라는 리포지토리에서 삼방향 병합(THREE_WAY_MERGE) 전략을 활용하여 feature-randomizationfeature라는 소스 브랜치를 main이라는 대상 브랜치와 병합할 때 발생하는 병합 충돌을 확인하려면, 다음과 같이 합니다.

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

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

    { "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. 2개 커밋 지정자 간의 병합에서 특정 파일의 병합 충돌에 대한 세부 정보를 얻으려면 다음을 지정하여 describe-merge-conflicts 명령을 실행합니다.

    • 병합 소스의 커밋 지정자(--source-commit-specifier 옵션 사용)

    • 병합 대상의 커밋 지정자(--destination-commit-specifier 옵션 사용).

    • 사용하려는 병합 옵션(--merge-option 옵션 사용)

    • 충돌을 설명하는 데 사용하기 위한 대상 파일의 경로(--file-path 옵션 사용).

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

    • (선택 사항) 사용하려는 충돌 해결 전략(--conflict-resolution-strategy 옵션 사용).

    • (선택 사항) 충돌에 대해 원하는 세부 사항 수준(--conflict-detail-level 옵션 사용).

    • (선택 사항) 반환할 병합 헝크의 최대 수(--max-merge-hunks 옵션 사용).

    • (선택 사항) 반환할 충돌이 있는 파일의 최대 수(--max-conflict-files 옵션 사용).

    예를 들어, MyDemoRepo라는 리포지토리에서 삼방향 병합(THREE_WAY_MERGE) 전략을 활용하여 feature-randomizationfeature라는 소스 브랜치와 main이라는 대상 브랜치에 있는 readme.md라는 파일을 병합할 때 발생하는 충돌을 확인하려면, 다음과 같이 합니다.

    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

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

    { "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. 2개 커밋 지정자의 병합 결과를 나타내는 참조되지 않은 커밋을 생성하려면 다음을 지정하여 create-unreferenced-merge-commit 명령을 실행합니다.

    • 병합 소스의 커밋 지정자(--source-commit-specifier 옵션 사용)

    • 병합 대상의 커밋 지정자(--destination-commit-specifier 옵션 사용).

    • 사용하려는 병합 옵션(--merge-option 옵션 사용)

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

    • (선택 사항) 사용하려는 충돌 해결 전략(--conflict-resolution-strategy 옵션 사용).

    • (선택 사항) 충돌에 대해 원하는 세부 사항 수준(--conflict-detail-level 옵션 사용).

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

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

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

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

    예를 들어 MyDemoRepo라는 리포지토리에서 소스 수용(ACCEPT_SOURCE) 전략을 사용하여 bugfix-1234라는 소스 브랜치를 main이라는 대상 브랜치와 병합할 때 발생하는 병합 충돌을 확인하려면, 다음과 같이 하십시오.

    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."

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

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