InfoGrab Docs

푸시 미러링

요약

_푸시 미러_는 업스트림 저장소에 적용된 커밋을 미러링하는 다운스트림 저장소입니다. 풀 미러링은 업스트림 저장소에서 주기적으로 업데이트를 가져오지만, 푸시 미러는 다음 경우에만 변경 사항을 수신합니다: 업스트림 저장소에 변경 사항을 푸시하면 푸시 미러는 5분 이내에 이를 수신하며, Only mirror protected branches 설정이 켜져 있으면 1분 이내에 수신합니다.

_푸시 미러_는 업스트림 저장소에 적용된 커밋을 미러링하는 다운스트림 저장소입니다. 푸시 미러는 업스트림 저장소에 적용된 커밋의 복사본을 수동적으로 수신합니다. 미러가 업스트림 저장소에서 벗어나지 않도록 다운스트림 미러에 직접 커밋을 푸시하지 마세요. 대신 업스트림 저장소에 커밋을 푸시하세요.

풀 미러링은 업스트림 저장소에서 주기적으로 업데이트를 가져오지만, 푸시 미러는 다음 경우에만 변경 사항을 수신합니다:

업스트림 저장소에 변경 사항을 푸시하면 푸시 미러는 5분 이내에 이를 수신하며, Only mirror protected branches 설정이 켜져 있으면 1분 이내에 수신합니다.

브랜치가 기본 브랜치에 머지되고 소스 프로젝트에서 삭제되면 다음 푸시 시 원격 미러에서도 삭제됩니다. 머지되지 않은 변경 사항이 있는 브랜치는 유지됩니다. 브랜치가 벗어나면 Mirroring repositories 섹션에 오류가 표시됩니다.

GitLab Silent Mode는 원격 미러로의 푸시와 원격 미러에서의 풀을 비활성화합니다.

푸시 미러 제한#

각 프로젝트는 최대 10개의 활성화된 푸시 미러를 가질 수 있습니다. 자세한 내용은 프로젝트 푸시 미러의 최대 수를 참조하세요.

푸시 미러링 구성#

기존 프로젝트에 푸시 미러링을 설정하려면:

  1. 상단 바에서 Search or go to를 선택하고 프로젝트를 찾습니다.
  2. 왼쪽 사이드바에서 Settings > Repository를 선택합니다.
  3. Mirroring repositories를 확장합니다.
  4. 저장소 URL을 입력합니다.
  5. Mirror direction 드롭다운 목록에서 Push를 선택합니다.
  6. Authentication method를 선택합니다. 자세한 내용은 미러의 인증 방법을 참조하세요.
  7. 필요한 경우 Only mirror protected branches를 선택합니다.
  8. 원하는 경우 Keep divergent refs를 선택합니다.
  9. 구성을 저장하려면 Mirror repository를 선택합니다.

API를 통한 푸시 미러 구성#

원격 미러 API를 통해 프로젝트 푸시 미러를 만들고 수정할 수도 있습니다.

벗어난 참조 유지#

기본적으로 원격(다운스트림) 미러의 참조(브랜치 또는 태그)가 로컬 저장소에서 벗어나면 업스트림 저장소가 원격의 모든 변경 사항을 덮어씁니다:

  1. 저장소가 maindevelop 브랜치를 원격에 미러링합니다.
  2. 원격 미러의 develop에 새 커밋이 추가됩니다.
  3. 다음 푸시에서 원격 미러가 업스트림 저장소와 일치하도록 업데이트됩니다.
  4. 원격 미러의 develop에 추가된 새 커밋이 손실됩니다.

Keep divergent refs를 선택하면 변경 사항이 다르게 처리됩니다:

  1. 원격 미러의 develop 브랜치에 대한 업데이트가 건너뜁니다.
  2. 원격 미러의 develop 브랜치는 업스트림 저장소에 없는 커밋을 보존합니다. 원격 미러에 있지만 업스트림에 없는 참조는 변경되지 않습니다.
  3. 업데이트가 실패로 표시됩니다.

미러를 만든 후에는 원격 미러 API를 통해서만 Keep divergent refs 값을 수정할 수 있습니다.

GitLab에서 GitHub으로 푸시 미러 설정#

GitLab에서 GitHub으로 커밋을 푸시할 때 GitHub은 이메일 주소를 기반으로 커밋 귀속을 결정합니다. 커밋 이메일 주소가 GitHub 사용자 계정의 인증된 이메일과 일치하면 GitHub은 해당 사용자에게 커밋을 귀속합니다. 그렇지 않으면 커밋 메타데이터의 이름과 이메일만으로 귀속되지 않은 커밋으로 표시됩니다.

전제 조건:

  • 저장소 콘텐츠에 대한 읽기 및 쓰기 권한이 있는 GitHub 세분화된 개인 액세스 토큰. 저장소에 .github/workflows 디렉토리가 포함된 경우 워크플로우에 대한 읽기 및 쓰기 액세스도 부여해야 합니다. 더 세분화된 액세스를 위해 특정 저장소에만 적용되도록 토큰을 구성합니다.

미러를 설정하려면:

  1. Git repository URL에 다음 형식으로 URL을 입력합니다:

    https://github.com/GROUP/PROJECT.git
    
    • GROUP: GitHub의 그룹.
    • PROJECT: GitHub의 프로젝트.
  2. Username에 개인 액세스 토큰 소유자의 사용자명을 입력합니다.

  3. Password에 GitHub 개인 액세스 토큰을 입력합니다.

  4. Mirror repository를 선택합니다.

미러링된 저장소가 나열됩니다. 예를 들어:

https://*****:*****@github.com/<your_github_group>/<your_github_project>.git

저장소는 곧 푸시됩니다. 강제로 푸시하려면 Update now([retry])를 선택합니다.

GitLab에서 AWS CodeCommit으로 푸시 미러 설정#

AWS CodeCommit 푸시 미러링은 GitLab 저장소를 AWS CodePipeline에 연결하는 가장 좋은 방법입니다. GitLab은 아직 SCM(Source Code Management) 제공자 중 하나로 지원되지 않습니다. 각 새 AWS CodePipeline에는 상당한 AWS 인프라 설정이 필요합니다. 또한 브랜치당 개별 파이프라인이 필요합니다.

AWS CodeDeploy가 CodePipeline의 최종 단계인 경우, 대신 이 도구들을 결합하여 배포를 만들 수 있습니다:

  • GitLab CI/CD 파이프라인.
  • CodeDeploy에 배포하기 위해 .gitlab-ci.yml의 최종 작업에서 AWS CLI.

GitLab에서 AWS CodeCommit으로 미러를 설정하려면:

  1. AWS IAM 콘솔에서 IAM 사용자를 만듭니다.

  2. 인라인 정책으로 저장소 미러링을 위한 다음 최소 권한 권한을 추가합니다.

    Amazon Resource Names(ARN)은 명시적으로 지역과 계정을 포함해야 합니다. 이 IAM 정책은 두 개의 샘플 저장소에 대한 미러링 액세스 권한을 부여합니다. 이 권한들은 미러링에 필요한 최소(최소 권한) 권한으로 테스트되었습니다:

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "MinimumGitLabPushMirroringPermissions",
                "Effect": "Allow",
                "Action": [
                    "codecommit:GitPull",
                    "codecommit:GitPush"
                ],
                "Resource": [
                  "arn:aws:codecommit:us-east-1:111111111111:MyDestinationRepo",
                  "arn:aws:codecommit:us-east-1:111111111111:MyDemo*"
                ]
            }
        ]
    }
    
  3. 사용자가 만들어진 후 AWS IAM 사용자 이름을 선택합니다.

  4. Security credentials 탭을 선택합니다.

  5. HTTPS Git credentials for AWS CodeCommit 아래에서 Generate credentials를 선택합니다.

    [!note] 이 Git 사용자 ID와 비밀번호는 CodeCommit과 통신하기 위한 것입니다. IAM 사용자 ID나 이 사용자의 AWS 키와 혼동하지 마세요.

  6. 특수 Git HTTPS 사용자 ID와 비밀번호를 복사하거나 다운로드합니다.

  7. AWS CodeCommit 콘솔에서 GitLab 저장소에서 미러링할 새 저장소를 만듭니다.

  8. 새 저장소를 열고 오른쪽 상단에서 Code > Clone HTTPS를 선택합니다(Clone HTTPS (GRC) 아님).

  9. GitLab에서 푸시 미러링할 저장소를 엽니다.

  10. Settings > Repository를 선택한 다음 Mirroring repositories를 확장합니다.

  11. 다음 형식을 사용하여 Git repository URL 필드를 입력하고 <aws-region>을 AWS 지역으로, <your_codecommit_repo>를 CodeCommit의 저장소 이름으로 교체합니다:

    https://git-codecommit.<aws-region>.amazonaws.com/v1/repos/<your_codecommit_repo>
    
  12. Authentication method에서 Username and Password를 선택합니다.

  13. Username에 AWS special HTTPS Git user ID를 입력합니다.

  14. Password에 AWS에서 이전에 만든 특수 IAM Git 클론 사용자 ID 비밀번호를 입력합니다.

  15. CodeCommit의 경우 Only mirror protected branches 옵션을 그대로 두세요. 더 자주 푸시됩니다(5분마다에서 1분마다로).

    CodePipeline은 AWS CI 설정을 원하는 각 명명된 브랜치에 대한 개별 파이프라인 설정이 필요합니다. 동적 이름을 가진 피처 브랜치는 지원되지 않으므로 Only mirror protected branches 구성이 CodePipeline 통합의 유연성 문제를 일으키지 않습니다. CodePipeline을 구축할 모든 명명된 브랜치도 보호해야 합니다.

  16. Mirror repository를 선택합니다. 미러링된 저장소가 표시되어야 합니다:

    https://*****:*****@git-codecommit.<aws-region>.amazonaws.com/v1/repos/<your_codecommit_repo>
    

강제 푸시로 미러링을 테스트하려면 Update now(반원 화살표)를 선택합니다. Last successful update에 날짜가 표시되면 미러링이 올바르게 구성된 것입니다. 올바르게 작동하지 않으면 빨간색 error 태그가 나타나 마우스를 올리면 오류 메시지를 표시합니다.

2FA가 활성화된 다른 GitLab 인스턴스로 푸시 미러 설정#

  1. 대상 GitLab 인스턴스에서 write_repository 범위가 있는 개인 액세스 토큰을 만듭니다.
  2. 소스 GitLab 인스턴스에서:
    1. 다음 형식으로 Git repository URL을 입력합니다: https://<destination host>/<your_gitlab_group_or_name>/<your_gitlab_project>.git.
    2. Username oauth2를 입력합니다.
    3. Password를 입력합니다. 대상 GitLab 인스턴스에서 만든 GitLab 개인 액세스 토큰을 사용합니다.
    4. Mirror repository를 선택합니다.

관련 주제#

푸시 미러링

Tier: Free, Premium, Ultimate
Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
원문 보기
요약

_푸시 미러_는 업스트림 저장소에 적용된 커밋을 미러링하는 다운스트림 저장소입니다. 풀 미러링은 업스트림 저장소에서 주기적으로 업데이트를 가져오지만, 푸시 미러는 다음 경우에만 변경 사항을 수신합니다: 업스트림 저장소에 변경 사항을 푸시하면 푸시 미러는 5분 이내에 이를 수신하며, Only mirror protected branches 설정이 켜져 있으면 1분 이내에 수신합니다.

_푸시 미러_는 업스트림 저장소에 적용된 커밋을 미러링하는 다운스트림 저장소입니다. 푸시 미러는 업스트림 저장소에 적용된 커밋의 복사본을 수동적으로 수신합니다. 미러가 업스트림 저장소에서 벗어나지 않도록 다운스트림 미러에 직접 커밋을 푸시하지 마세요. 대신 업스트림 저장소에 커밋을 푸시하세요.

풀 미러링은 업스트림 저장소에서 주기적으로 업데이트를 가져오지만, 푸시 미러는 다음 경우에만 변경 사항을 수신합니다:

업스트림 저장소에 변경 사항을 푸시하면 푸시 미러는 5분 이내에 이를 수신하며, Only mirror protected branches 설정이 켜져 있으면 1분 이내에 수신합니다.

브랜치가 기본 브랜치에 머지되고 소스 프로젝트에서 삭제되면 다음 푸시 시 원격 미러에서도 삭제됩니다. 머지되지 않은 변경 사항이 있는 브랜치는 유지됩니다. 브랜치가 벗어나면 Mirroring repositories 섹션에 오류가 표시됩니다.

GitLab Silent Mode는 원격 미러로의 푸시와 원격 미러에서의 풀을 비활성화합니다.

푸시 미러 제한#

각 프로젝트는 최대 10개의 활성화된 푸시 미러를 가질 수 있습니다. 자세한 내용은 프로젝트 푸시 미러의 최대 수를 참조하세요.

푸시 미러링 구성#

기존 프로젝트에 푸시 미러링을 설정하려면:

  1. 상단 바에서 Search or go to를 선택하고 프로젝트를 찾습니다.
  2. 왼쪽 사이드바에서 Settings > Repository를 선택합니다.
  3. Mirroring repositories를 확장합니다.
  4. 저장소 URL을 입력합니다.
  5. Mirror direction 드롭다운 목록에서 Push를 선택합니다.
  6. Authentication method를 선택합니다. 자세한 내용은 미러의 인증 방법을 참조하세요.
  7. 필요한 경우 Only mirror protected branches를 선택합니다.
  8. 원하는 경우 Keep divergent refs를 선택합니다.
  9. 구성을 저장하려면 Mirror repository를 선택합니다.

API를 통한 푸시 미러 구성#

원격 미러 API를 통해 프로젝트 푸시 미러를 만들고 수정할 수도 있습니다.

벗어난 참조 유지#

기본적으로 원격(다운스트림) 미러의 참조(브랜치 또는 태그)가 로컬 저장소에서 벗어나면 업스트림 저장소가 원격의 모든 변경 사항을 덮어씁니다:

  1. 저장소가 maindevelop 브랜치를 원격에 미러링합니다.
  2. 원격 미러의 develop에 새 커밋이 추가됩니다.
  3. 다음 푸시에서 원격 미러가 업스트림 저장소와 일치하도록 업데이트됩니다.
  4. 원격 미러의 develop에 추가된 새 커밋이 손실됩니다.

Keep divergent refs를 선택하면 변경 사항이 다르게 처리됩니다:

  1. 원격 미러의 develop 브랜치에 대한 업데이트가 건너뜁니다.
  2. 원격 미러의 develop 브랜치는 업스트림 저장소에 없는 커밋을 보존합니다. 원격 미러에 있지만 업스트림에 없는 참조는 변경되지 않습니다.
  3. 업데이트가 실패로 표시됩니다.

미러를 만든 후에는 원격 미러 API를 통해서만 Keep divergent refs 값을 수정할 수 있습니다.

GitLab에서 GitHub으로 푸시 미러 설정#

GitLab에서 GitHub으로 커밋을 푸시할 때 GitHub은 이메일 주소를 기반으로 커밋 귀속을 결정합니다. 커밋 이메일 주소가 GitHub 사용자 계정의 인증된 이메일과 일치하면 GitHub은 해당 사용자에게 커밋을 귀속합니다. 그렇지 않으면 커밋 메타데이터의 이름과 이메일만으로 귀속되지 않은 커밋으로 표시됩니다.

전제 조건:

  • 저장소 콘텐츠에 대한 읽기 및 쓰기 권한이 있는 GitHub 세분화된 개인 액세스 토큰. 저장소에 .github/workflows 디렉토리가 포함된 경우 워크플로우에 대한 읽기 및 쓰기 액세스도 부여해야 합니다. 더 세분화된 액세스를 위해 특정 저장소에만 적용되도록 토큰을 구성합니다.

미러를 설정하려면:

  1. Git repository URL에 다음 형식으로 URL을 입력합니다:

    https://github.com/GROUP/PROJECT.git
    
    • GROUP: GitHub의 그룹.
    • PROJECT: GitHub의 프로젝트.
  2. Username에 개인 액세스 토큰 소유자의 사용자명을 입력합니다.

  3. Password에 GitHub 개인 액세스 토큰을 입력합니다.

  4. Mirror repository를 선택합니다.

미러링된 저장소가 나열됩니다. 예를 들어:

https://*****:*****@github.com/<your_github_group>/<your_github_project>.git

저장소는 곧 푸시됩니다. 강제로 푸시하려면 Update now([retry])를 선택합니다.

GitLab에서 AWS CodeCommit으로 푸시 미러 설정#

AWS CodeCommit 푸시 미러링은 GitLab 저장소를 AWS CodePipeline에 연결하는 가장 좋은 방법입니다. GitLab은 아직 SCM(Source Code Management) 제공자 중 하나로 지원되지 않습니다. 각 새 AWS CodePipeline에는 상당한 AWS 인프라 설정이 필요합니다. 또한 브랜치당 개별 파이프라인이 필요합니다.

AWS CodeDeploy가 CodePipeline의 최종 단계인 경우, 대신 이 도구들을 결합하여 배포를 만들 수 있습니다:

  • GitLab CI/CD 파이프라인.
  • CodeDeploy에 배포하기 위해 .gitlab-ci.yml의 최종 작업에서 AWS CLI.

GitLab에서 AWS CodeCommit으로 미러를 설정하려면:

  1. AWS IAM 콘솔에서 IAM 사용자를 만듭니다.

  2. 인라인 정책으로 저장소 미러링을 위한 다음 최소 권한 권한을 추가합니다.

    Amazon Resource Names(ARN)은 명시적으로 지역과 계정을 포함해야 합니다. 이 IAM 정책은 두 개의 샘플 저장소에 대한 미러링 액세스 권한을 부여합니다. 이 권한들은 미러링에 필요한 최소(최소 권한) 권한으로 테스트되었습니다:

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "MinimumGitLabPushMirroringPermissions",
                "Effect": "Allow",
                "Action": [
                    "codecommit:GitPull",
                    "codecommit:GitPush"
                ],
                "Resource": [
                  "arn:aws:codecommit:us-east-1:111111111111:MyDestinationRepo",
                  "arn:aws:codecommit:us-east-1:111111111111:MyDemo*"
                ]
            }
        ]
    }
    
  3. 사용자가 만들어진 후 AWS IAM 사용자 이름을 선택합니다.

  4. Security credentials 탭을 선택합니다.

  5. HTTPS Git credentials for AWS CodeCommit 아래에서 Generate credentials를 선택합니다.

    [!note] 이 Git 사용자 ID와 비밀번호는 CodeCommit과 통신하기 위한 것입니다. IAM 사용자 ID나 이 사용자의 AWS 키와 혼동하지 마세요.

  6. 특수 Git HTTPS 사용자 ID와 비밀번호를 복사하거나 다운로드합니다.

  7. AWS CodeCommit 콘솔에서 GitLab 저장소에서 미러링할 새 저장소를 만듭니다.

  8. 새 저장소를 열고 오른쪽 상단에서 Code > Clone HTTPS를 선택합니다(Clone HTTPS (GRC) 아님).

  9. GitLab에서 푸시 미러링할 저장소를 엽니다.

  10. Settings > Repository를 선택한 다음 Mirroring repositories를 확장합니다.

  11. 다음 형식을 사용하여 Git repository URL 필드를 입력하고 <aws-region>을 AWS 지역으로, <your_codecommit_repo>를 CodeCommit의 저장소 이름으로 교체합니다:

    https://git-codecommit.<aws-region>.amazonaws.com/v1/repos/<your_codecommit_repo>
    
  12. Authentication method에서 Username and Password를 선택합니다.

  13. Username에 AWS special HTTPS Git user ID를 입력합니다.

  14. Password에 AWS에서 이전에 만든 특수 IAM Git 클론 사용자 ID 비밀번호를 입력합니다.

  15. CodeCommit의 경우 Only mirror protected branches 옵션을 그대로 두세요. 더 자주 푸시됩니다(5분마다에서 1분마다로).

    CodePipeline은 AWS CI 설정을 원하는 각 명명된 브랜치에 대한 개별 파이프라인 설정이 필요합니다. 동적 이름을 가진 피처 브랜치는 지원되지 않으므로 Only mirror protected branches 구성이 CodePipeline 통합의 유연성 문제를 일으키지 않습니다. CodePipeline을 구축할 모든 명명된 브랜치도 보호해야 합니다.

  16. Mirror repository를 선택합니다. 미러링된 저장소가 표시되어야 합니다:

    https://*****:*****@git-codecommit.<aws-region>.amazonaws.com/v1/repos/<your_codecommit_repo>
    

강제 푸시로 미러링을 테스트하려면 Update now(반원 화살표)를 선택합니다. Last successful update에 날짜가 표시되면 미러링이 올바르게 구성된 것입니다. 올바르게 작동하지 않으면 빨간색 error 태그가 나타나 마우스를 올리면 오류 메시지를 표시합니다.

2FA가 활성화된 다른 GitLab 인스턴스로 푸시 미러 설정#

  1. 대상 GitLab 인스턴스에서 write_repository 범위가 있는 개인 액세스 토큰을 만듭니다.
  2. 소스 GitLab 인스턴스에서:
    1. 다음 형식으로 Git repository URL을 입력합니다: https://<destination host>/<your_gitlab_group_or_name>/<your_gitlab_project>.git.
    2. Username oauth2를 입력합니다.
    3. Password를 입력합니다. 대상 GitLab 인스턴스에서 만든 GitLab 개인 액세스 토큰을 사용합니다.
    4. Mirror repository를 선택합니다.

관련 주제#