InfoGrab DocsInfoGrab Docs

리포지터리 미러링

요약

외부 소스와 리포지터리를 미러링할 수 있습니다. 미러링 방법은 여러 가지가 있습니다. 다음과 같은 경우에 리포지터리를 미러링합니다. 상단 바에서 Search or go to를 선택하고 프로젝트를 찾습니다. 왼쪽 사이드바에서 Settings > Repository를 선택합니다.

외부 소스와 리포지터리를 미러링할 수 있습니다. 어느 리포지터리를 소스로 사용할지 선택할 수 있습니다. 브랜치, 태그, 커밋은 자동으로 동기화됩니다.

미러링 방법은 여러 가지가 있습니다.

  • 푸시: GitLab에서 다른 위치로 리포지터리를 미러링합니다.
  • 풀: 다른 위치에서 리포지터리를 미러링합니다. Premium 및 Ultimate 티어에서 사용할 수 있습니다.
  • 양방향 미러링도 사용할 수 있지만 충돌이 발생할 수 있습니다.

다음과 같은 경우에 리포지터리를 미러링합니다.

  • 프로젝트의 정규 버전이 GitLab으로 마이그레이션된 경우입니다. 이전 위치에서 프로젝트의 복사본을 계속 제공하려면 GitLab 리포지터리를 푸시 미러로 구성합니다. GitLab 리포지터리에서 변경한 내용이 이전 위치로 복사됩니다.
  • GitLab 인스턴스는 비공개이지만 일부 프로젝트를 오픈소스로 공개하려는 경우입니다.
  • GitLab으로 마이그레이션했으나 프로젝트의 정규 버전이 다른 곳에 있는 경우입니다. GitLab 리포지터리를 다른 프로젝트의 풀 미러로 구성합니다. GitLab 리포지터리가 해당 프로젝트의 커밋, 태그, 브랜치 복사본을 가져옵니다. 가져온 내용은 GitLab에서 사용할 수 있습니다.

다음은 지원되지 않습니다.

  • SCP 스타일 URL. SCP 스타일 URL 구현 작업이 진행 중입니다. 자세한 내용과 진행 상황은 이슈 18993을 참고합니다.
  • dumb HTTP 프로토콜을 통한 리포지터리 미러링.
  • 서로 다른 객체 형식을 사용하는 리포지터리 간 미러링. 예를 들어 SHA-1 리포지터리와 SHA-256 리포지터리 간 미러링입니다.

리포지터리 미러 만들기#

사전 요건:

  • 프로젝트에 대한 Maintainer 또는 Owner 권한이 있어야 합니다.
  • 미러가 ssh://로 연결하는 경우 서버에서 호스트 키를 감지할 수 있거나, 키의 로컬 복사본을 가지고 있어야 합니다.
  1. 상단 바에서 Search or go to를 선택하고 프로젝트를 찾습니다.

  2. 왼쪽 사이드바에서 Settings > Repository를 선택합니다.

  3. Mirroring repositories를 확장합니다.

  4. Add new를 선택합니다.

  5. Git repository URL을 입력합니다. 리포지터리는 http://, https://, ssh://, git:// 중 하나로 접근할 수 있어야 합니다.

  6. Mirror direction을 선택합니다. 자세한 내용은 풀 미러링 및 푸시 미러링을 참고합니다.

  7. ssh:// URL을 입력한 경우 다음 중 하나를 선택합니다.

    • Detect host keys: GitLab이 서버에서 호스트 키를 가져와 지문을 표시합니다.
    • Input host keys manually: 호스트 키를 SSH host key에 입력합니다.

    리포지터리를 미러링할 때 GitLab은 연결하기 전에 저장된 호스트 키 중 하나 이상이 일치하는지 확인합니다. 이 검사는 악의적인 코드 주입으로부터 미러를 보호하고, 비밀번호가 탈취되는 것을 방지합니다.

  8. Authentication method를 선택합니다. 자세한 내용은 미러의 인증 방법을 참고합니다.

  9. SSH 호스트 키로 인증하는 경우 호스트 키를 확인하여 올바른지 검증합니다.

  10. 분기된 ref에 대한 강제 푸시를 방지하려면 Keep divergent refs를 선택합니다. 자세한 내용은 분기된 ref 유지를 참고합니다.

  11. 선택 사항. 미러링되는 브랜치 수를 제한하려면 Mirror only protected branches를 선택하거나 Mirror specific branches에 정규 표현식을 입력합니다.

  12. Mirror repository를 선택합니다.

예시: SSH 인증으로 미러 만들기#

인증 방법으로 SSH public key를 선택하면 GitLab이 GitLab 리포지터리용 공개 키를 생성합니다. 이 키를 GitLab이 아닌 서버에 제공해야 합니다. 자세한 내용은 SSH 공개 키 가져오기를 참고합니다.

SSH 인증으로 리포지터리를 미러링하려면 다음 단계를 따릅니다.

  1. 상단 바에서 Search or go to를 선택하고 프로젝트를 찾습니다.

  2. 왼쪽 사이드바에서 Settings > Repository를 선택합니다.

  3. Mirroring repositories를 확장합니다.

  4. Add new를 선택합니다.

  5. Git repository URL을 입력합니다. ssh://gitlab.com/gitlab-org/gitlab.git 형식의 URL을 제공합니다.

    [!note] SSH URL은 SCP 스타일 URL(git@host:path/to/repo.git) 대신 ssh://host/path/to/repo.git 형식을 사용해야 합니다. 콜론(:)을 슬래시(/)로 바꾸고 ssh:// 접두사를 추가합니다.

  6. Mirror direction을 선택합니다. 자세한 내용은 풀 미러링 및 푸시 미러링을 참고합니다.

  7. Detect host keys 또는 Input host keys manually를 선택합니다.

  8. Authentication method 필드에서 SSH public key를 선택합니다.

  9. Username 필드에 git을 추가합니다.

  10. 선택 사항. Mirror branches 설정을 구성합니다.

  11. Mirror repository를 선택합니다.

  12. SSH 공개 키를 복사하여 GitLab이 아닌 서버에 제공합니다.

보호된 브랜치만 미러링#

미러링 프로젝트의 보호된 브랜치만 원격 리포지터리로 또는 원격 리포지터리에서 미러링하도록 선택할 수 있습니다. 풀 미러링의 경우 미러링 프로젝트의 보호되지 않은 브랜치는 미러링되지 않으며 내용이 분기될 수 있습니다.

이 옵션을 사용하려면 리포지터리 미러를 만들 때 Only mirror protected branches를 선택합니다.

특정 브랜치 미러링#

RE2 정규 표현식과 이름이 일치하는 브랜치만 미러링하려면 Mirror specific branches 필드에 정규 표현식을 입력합니다. 이름이 정규 표현식과 일치하지 않는 브랜치는 미러링되지 않습니다.

미러 업데이트#

미러 리포지터리가 업데이트되면 새 브랜치, 태그, 커밋이 모두 프로젝트의 활동 피드에 표시됩니다. GitLab의 리포지터리 미러는 자동으로 업데이트됩니다. 업데이트를 수동으로 트리거할 수도 있습니다.

  • GitLab.com에서는 5분에 최대 한 번입니다.
  • GitLab Self-Managed 인스턴스에서는 관리자가 설정한 풀 미러링 간격 한도에 따릅니다.
Note

GitLab 사일런트 모드는 푸시 업데이트와 풀 업데이트를 모두 비활성화합니다.

업데이트 강제 적용#

미러는 자동으로 업데이트되도록 예약되어 있지만, 다음 경우가 아니라면 즉시 업데이트를 강제할 수 있습니다.

  • 미러가 이미 업데이트 중인 경우입니다.
  • 마지막 업데이트 이후 풀 미러링 한도의 간격(초)이 아직 경과하지 않은 경우입니다.

사전 요건:

  • 프로젝트에 대한 Maintainer 또는 Owner 권한이 있어야 합니다.
  1. 상단 바에서 Search or go to를 선택하고 프로젝트를 찾습니다.
  2. 왼쪽 사이드바에서 Settings > Repository를 선택합니다.
  3. Mirroring repositories를 확장합니다.
  4. Mirrored repositories로 스크롤하여 업데이트할 미러를 확인합니다.
  5. Update now ([retry])를 선택합니다.

미러의 인증 방법#

미러를 만들 때는 해당 미러의 인증 방법을 구성해야 합니다. GitLab은 다음 인증 방법을 지원합니다.

프로젝트 액세스 토큰 또는 그룹 액세스 토큰의 경우, 비어 있지 않은 값을 사용자 이름으로 사용하고 토큰을 비밀번호로 사용합니다.

SSH 인증#

SSH 인증은 상호 인증입니다.

  • 리포지터리에 접근할 권한이 있음을 서버에 증명해야 합니다.
  • 서버 또한 자신이 주장하는 대상임을 증명해야 합니다.

SSH 인증에서는 비밀번호 또는 공개 키로 자격 증명을 제공합니다. 다른 리포지터리가 위치한 서버는 호스트 키로 자격 증명을 제공합니다. 이 호스트 키의 지문을 수동으로 확인해야 합니다.

SSH로 미러링하는 경우(ssh:// URL 사용) 다음 방법으로 인증할 수 있습니다.

  • HTTPS에서와 마찬가지로 비밀번호 기반 인증입니다.
  • 공개 키 인증입니다. 이 방법은 비밀번호 인증보다 대체로 더 안전하며, 특히 다른 리포지터리가 배포 키를 지원하는 경우에 그렇습니다.

SSH 공개 키 가져오기#

리포지터리를 미러링할 때 인증 방법으로 SSH public key를 선택하면 GitLab이 공개 키를 생성합니다. GitLab이 아닌 서버는 GitLab 리포지터리와 신뢰 관계를 맺기 위해 이 키가 필요합니다. SSH 공개 키를 복사하려면 다음 단계를 따릅니다.

  1. 상단 바에서 Search or go to를 선택하고 프로젝트를 찾습니다.
  2. 왼쪽 사이드바에서 Settings > Repository를 선택합니다.
  3. Mirroring repositories를 확장합니다.
  4. Mirrored repositories로 스크롤합니다.
  5. 해당 리포지터리를 찾아 Copy SSH public key ([copy-to-clipboard])를 선택합니다.
  6. 다른 리포지터리의 구성에 공개 SSH 키를 추가합니다.
    • 다른 리포지터리가 GitLab에서 호스팅되는 경우 공개 SSH 키를 배포 키로 추가합니다.
    • 다른 리포지터리가 그 외의 곳에서 호스팅되는 경우 사용자의 authorized_keys 파일에 키를 추가합니다. 공개 SSH 키 전체를 파일의 한 줄에 붙여넣고 저장합니다.

키를 변경해야 하는 경우 미러를 제거했다가 다시 추가하여 새 키를 생성할 수 있습니다. 미러가 계속 동작하도록 새 키로 다른 리포지터리를 업데이트합니다.

Note

생성된 키는 파일 시스템이 아니라 GitLab 데이터베이스에 저장됩니다. 따라서 미러의 SSH 공개 키 인증은 pre-receive 훅에서 사용할 수 없습니다.

호스트 키 확인#

호스트 키를 사용할 때는 지문이 예상한 값과 일치하는지 항상 확인합니다. GitLab.com을 비롯한 코드 호스팅 사이트는 확인할 수 있도록 지문을 공개합니다.

그 외 공급자는 방식이 다양합니다. 다음 조건을 충족하면 아래 명령으로 키 지문을 안전하게 수집할 수 있습니다.

  • GitLab Self-Managed를 운영합니다.
  • 다른 리포지터리의 서버에 접근할 수 있습니다.
$ cat /etc/ssh/ssh_host*pub | ssh-keygen -E md5 -l -f -
256 MD5:f4:28:9f:23:99:15:21:1b:bf:ed:1f:8e:a0:76:b2:9d root@example.com (ECDSA)
256 MD5:e6:eb:45:8a:3c:59:35:5f:e9:5b:80:12:be:7e:22:73 root@example.com (ED25519)
2048 MD5:3f:72:be:3d:62:03:5c:62:83:e8:6e:14:34:3a:85:1d root@example.com (RSA)

이전 버전의 SSH에서는 명령에서 -E md5를 제거해야 할 수 있습니다.

관련 주제#

리포지터리 미러링

GitLab v19.5
Tier: Premium, Ultimate
Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
원문 보기

요약

외부 소스와 리포지터리를 미러링할 수 있습니다. 미러링 방법은 여러 가지가 있습니다. 다음과 같은 경우에 리포지터리를 미러링합니다. 상단 바에서 Search or go to를 선택하고 프로젝트를 찾습니다. 왼쪽 사이드바에서 Settings > Repository를 선택합니다.

외부 소스와 리포지터리를 미러링할 수 있습니다. 어느 리포지터리를 소스로 사용할지 선택할 수 있습니다. 브랜치, 태그, 커밋은 자동으로 동기화됩니다.

미러링 방법은 여러 가지가 있습니다.

  • 푸시: GitLab에서 다른 위치로 리포지터리를 미러링합니다.
  • 풀: 다른 위치에서 리포지터리를 미러링합니다. Premium 및 Ultimate 티어에서 사용할 수 있습니다.
  • 양방향 미러링도 사용할 수 있지만 충돌이 발생할 수 있습니다.

다음과 같은 경우에 리포지터리를 미러링합니다.

  • 프로젝트의 정규 버전이 GitLab으로 마이그레이션된 경우입니다. 이전 위치에서 프로젝트의 복사본을 계속 제공하려면 GitLab 리포지터리를 푸시 미러로 구성합니다. GitLab 리포지터리에서 변경한 내용이 이전 위치로 복사됩니다.
  • GitLab 인스턴스는 비공개이지만 일부 프로젝트를 오픈소스로 공개하려는 경우입니다.
  • GitLab으로 마이그레이션했으나 프로젝트의 정규 버전이 다른 곳에 있는 경우입니다. GitLab 리포지터리를 다른 프로젝트의 풀 미러로 구성합니다. GitLab 리포지터리가 해당 프로젝트의 커밋, 태그, 브랜치 복사본을 가져옵니다. 가져온 내용은 GitLab에서 사용할 수 있습니다.

다음은 지원되지 않습니다.

  • SCP 스타일 URL. SCP 스타일 URL 구현 작업이 진행 중입니다. 자세한 내용과 진행 상황은 이슈 18993을 참고합니다.
  • dumb HTTP 프로토콜을 통한 리포지터리 미러링.
  • 서로 다른 객체 형식을 사용하는 리포지터리 간 미러링. 예를 들어 SHA-1 리포지터리와 SHA-256 리포지터리 간 미러링입니다.

리포지터리 미러 만들기#

사전 요건:

  • 프로젝트에 대한 Maintainer 또는 Owner 권한이 있어야 합니다.
  • 미러가 ssh://로 연결하는 경우 서버에서 호스트 키를 감지할 수 있거나, 키의 로컬 복사본을 가지고 있어야 합니다.
  1. 상단 바에서 Search or go to를 선택하고 프로젝트를 찾습니다.

  2. 왼쪽 사이드바에서 Settings > Repository를 선택합니다.

  3. Mirroring repositories를 확장합니다.

  4. Add new를 선택합니다.

  5. Git repository URL을 입력합니다. 리포지터리는 http://, https://, ssh://, git:// 중 하나로 접근할 수 있어야 합니다.

  6. Mirror direction을 선택합니다. 자세한 내용은 풀 미러링 및 푸시 미러링을 참고합니다.

  7. ssh:// URL을 입력한 경우 다음 중 하나를 선택합니다.

    • Detect host keys: GitLab이 서버에서 호스트 키를 가져와 지문을 표시합니다.
    • Input host keys manually: 호스트 키를 SSH host key에 입력합니다.

    리포지터리를 미러링할 때 GitLab은 연결하기 전에 저장된 호스트 키 중 하나 이상이 일치하는지 확인합니다. 이 검사는 악의적인 코드 주입으로부터 미러를 보호하고, 비밀번호가 탈취되는 것을 방지합니다.

  8. Authentication method를 선택합니다. 자세한 내용은 미러의 인증 방법을 참고합니다.

  9. SSH 호스트 키로 인증하는 경우 호스트 키를 확인하여 올바른지 검증합니다.

  10. 분기된 ref에 대한 강제 푸시를 방지하려면 Keep divergent refs를 선택합니다. 자세한 내용은 분기된 ref 유지를 참고합니다.

  11. 선택 사항. 미러링되는 브랜치 수를 제한하려면 Mirror only protected branches를 선택하거나 Mirror specific branches에 정규 표현식을 입력합니다.

  12. Mirror repository를 선택합니다.

예시: SSH 인증으로 미러 만들기#

인증 방법으로 SSH public key를 선택하면 GitLab이 GitLab 리포지터리용 공개 키를 생성합니다. 이 키를 GitLab이 아닌 서버에 제공해야 합니다. 자세한 내용은 SSH 공개 키 가져오기를 참고합니다.

SSH 인증으로 리포지터리를 미러링하려면 다음 단계를 따릅니다.

  1. 상단 바에서 Search or go to를 선택하고 프로젝트를 찾습니다.

  2. 왼쪽 사이드바에서 Settings > Repository를 선택합니다.

  3. Mirroring repositories를 확장합니다.

  4. Add new를 선택합니다.

  5. Git repository URL을 입력합니다. ssh://gitlab.com/gitlab-org/gitlab.git 형식의 URL을 제공합니다.

    [!note] SSH URL은 SCP 스타일 URL(git@host:path/to/repo.git) 대신 ssh://host/path/to/repo.git 형식을 사용해야 합니다. 콜론(:)을 슬래시(/)로 바꾸고 ssh:// 접두사를 추가합니다.

  6. Mirror direction을 선택합니다. 자세한 내용은 풀 미러링 및 푸시 미러링을 참고합니다.

  7. Detect host keys 또는 Input host keys manually를 선택합니다.

  8. Authentication method 필드에서 SSH public key를 선택합니다.

  9. Username 필드에 git을 추가합니다.

  10. 선택 사항. Mirror branches 설정을 구성합니다.

  11. Mirror repository를 선택합니다.

  12. SSH 공개 키를 복사하여 GitLab이 아닌 서버에 제공합니다.

보호된 브랜치만 미러링#

미러링 프로젝트의 보호된 브랜치만 원격 리포지터리로 또는 원격 리포지터리에서 미러링하도록 선택할 수 있습니다. 풀 미러링의 경우 미러링 프로젝트의 보호되지 않은 브랜치는 미러링되지 않으며 내용이 분기될 수 있습니다.

이 옵션을 사용하려면 리포지터리 미러를 만들 때 Only mirror protected branches를 선택합니다.

특정 브랜치 미러링#

RE2 정규 표현식과 이름이 일치하는 브랜치만 미러링하려면 Mirror specific branches 필드에 정규 표현식을 입력합니다. 이름이 정규 표현식과 일치하지 않는 브랜치는 미러링되지 않습니다.

미러 업데이트#

미러 리포지터리가 업데이트되면 새 브랜치, 태그, 커밋이 모두 프로젝트의 활동 피드에 표시됩니다. GitLab의 리포지터리 미러는 자동으로 업데이트됩니다. 업데이트를 수동으로 트리거할 수도 있습니다.

  • GitLab.com에서는 5분에 최대 한 번입니다.
  • GitLab Self-Managed 인스턴스에서는 관리자가 설정한 풀 미러링 간격 한도에 따릅니다.
Note

GitLab 사일런트 모드는 푸시 업데이트와 풀 업데이트를 모두 비활성화합니다.

업데이트 강제 적용#

미러는 자동으로 업데이트되도록 예약되어 있지만, 다음 경우가 아니라면 즉시 업데이트를 강제할 수 있습니다.

  • 미러가 이미 업데이트 중인 경우입니다.
  • 마지막 업데이트 이후 풀 미러링 한도의 간격(초)이 아직 경과하지 않은 경우입니다.

사전 요건:

  • 프로젝트에 대한 Maintainer 또는 Owner 권한이 있어야 합니다.
  1. 상단 바에서 Search or go to를 선택하고 프로젝트를 찾습니다.
  2. 왼쪽 사이드바에서 Settings > Repository를 선택합니다.
  3. Mirroring repositories를 확장합니다.
  4. Mirrored repositories로 스크롤하여 업데이트할 미러를 확인합니다.
  5. Update now ([retry])를 선택합니다.

미러의 인증 방법#

미러를 만들 때는 해당 미러의 인증 방법을 구성해야 합니다. GitLab은 다음 인증 방법을 지원합니다.

프로젝트 액세스 토큰 또는 그룹 액세스 토큰의 경우, 비어 있지 않은 값을 사용자 이름으로 사용하고 토큰을 비밀번호로 사용합니다.

SSH 인증#

SSH 인증은 상호 인증입니다.

  • 리포지터리에 접근할 권한이 있음을 서버에 증명해야 합니다.
  • 서버 또한 자신이 주장하는 대상임을 증명해야 합니다.

SSH 인증에서는 비밀번호 또는 공개 키로 자격 증명을 제공합니다. 다른 리포지터리가 위치한 서버는 호스트 키로 자격 증명을 제공합니다. 이 호스트 키의 지문을 수동으로 확인해야 합니다.

SSH로 미러링하는 경우(ssh:// URL 사용) 다음 방법으로 인증할 수 있습니다.

  • HTTPS에서와 마찬가지로 비밀번호 기반 인증입니다.
  • 공개 키 인증입니다. 이 방법은 비밀번호 인증보다 대체로 더 안전하며, 특히 다른 리포지터리가 배포 키를 지원하는 경우에 그렇습니다.

SSH 공개 키 가져오기#

리포지터리를 미러링할 때 인증 방법으로 SSH public key를 선택하면 GitLab이 공개 키를 생성합니다. GitLab이 아닌 서버는 GitLab 리포지터리와 신뢰 관계를 맺기 위해 이 키가 필요합니다. SSH 공개 키를 복사하려면 다음 단계를 따릅니다.

  1. 상단 바에서 Search or go to를 선택하고 프로젝트를 찾습니다.
  2. 왼쪽 사이드바에서 Settings > Repository를 선택합니다.
  3. Mirroring repositories를 확장합니다.
  4. Mirrored repositories로 스크롤합니다.
  5. 해당 리포지터리를 찾아 Copy SSH public key ([copy-to-clipboard])를 선택합니다.
  6. 다른 리포지터리의 구성에 공개 SSH 키를 추가합니다.
    • 다른 리포지터리가 GitLab에서 호스팅되는 경우 공개 SSH 키를 배포 키로 추가합니다.
    • 다른 리포지터리가 그 외의 곳에서 호스팅되는 경우 사용자의 authorized_keys 파일에 키를 추가합니다. 공개 SSH 키 전체를 파일의 한 줄에 붙여넣고 저장합니다.

키를 변경해야 하는 경우 미러를 제거했다가 다시 추가하여 새 키를 생성할 수 있습니다. 미러가 계속 동작하도록 새 키로 다른 리포지터리를 업데이트합니다.

Note

생성된 키는 파일 시스템이 아니라 GitLab 데이터베이스에 저장됩니다. 따라서 미러의 SSH 공개 키 인증은 pre-receive 훅에서 사용할 수 없습니다.

호스트 키 확인#

호스트 키를 사용할 때는 지문이 예상한 값과 일치하는지 항상 확인합니다. GitLab.com을 비롯한 코드 호스팅 사이트는 확인할 수 있도록 지문을 공개합니다.

그 외 공급자는 방식이 다양합니다. 다음 조건을 충족하면 아래 명령으로 키 지문을 안전하게 수집할 수 있습니다.

  • GitLab Self-Managed를 운영합니다.
  • 다른 리포지터리의 서버에 접근할 수 있습니다.
$ cat /etc/ssh/ssh_host*pub | ssh-keygen -E md5 -l -f -
256 MD5:f4:28:9f:23:99:15:21:1b:bf:ed:1f:8e:a0:76:b2:9d root@example.com (ECDSA)
256 MD5:e6:eb:45:8a:3c:59:35:5f:e9:5b:80:12:be:7e:22:73 root@example.com (ED25519)
2048 MD5:3f:72:be:3d:62:03:5c:62:83:e8:6e:14:34:3a:85:1d root@example.com (RSA)

이전 버전의 SSH에서는 명령에서 -E md5를 제거해야 할 수 있습니다.

관련 주제#