GitHub에서 GitLab으로 가져오기 | DevSecOps 구축 컨설팅, 교육, 기술지원 서비스 제공

GitHub에서 GitLab으로 가져오기

가져오기 도구를 사용하여 GitHub 리포지토리를 GitLab.com 또는 자체 관리형 GitLab 인스턴스로 가져올 수 있습니다.

프로젝트의 다음 항목을 가져옵니다.

  • 리포지토리 설명 (GitLab.com 및 7.7+)
  • Git repository 데이터 (GitLab.com 및 7.7+)
  • Issues (GitLab.com 및 7.7+)
  • Pull requests (GitLab.com 및 8.4 이상)
  • Wiki 페이지 (GitLab.com 및 8.4 이상)
  • 마일스톤 (GitLab.com 및 8.7 이상)
  • 레이블 (GitLab.com 및 8.7 이상)
  • 릴리즈 노트 설명 (GitLab.com 및 8.12+)
  • Pull request 리뷰 코멘트 (GitLab.com & 10.2+)
  • Pull request 리뷰 (GitLab.com & 13.7+)
  • Pull request “merged by” 정보 (GitLab.com & 13.7+)
  • 정기적인 이슈 및 Pull request 코멘트
  • Git LFS (대용량 파일 저장소) 개체

Pull request 및 이슈에 대한 참조는 유지되며(GitLab.com 및 8.7+), 가져온 각 저장소는 가시성 수준이 제한되지 않는 한 가시성 수준을 유지하며, 이 경우 기본 프로젝트 가시성으로 기본 설정됩니다.

네임스페이스는 gitlab.com/janedoe 또는 gitlab.com/customer-success과 같은 GitLab에서 사용자나 그룹입니다. Rails 콘솔에서 프로젝트를 다른 네임스페이스로 이동하기 위해 몇 가지 일괄 작업을 수행할 수 있습니다.

이 프로세스는 GitHub에서 GitLab으로 어떤 유형의 그룹이나 조직도 마이그레이션하거나 가져오지 않습니다.

사용 사례#

수행하는 단계는 GitHub.com 또는 GitHub Enterprise에서 가져오는지 여부와 GitLab.com 또는 자체 관리형 GitLab 인스턴스로 가져오는지 여부에 따라 다릅니다.

  • GitLab.com으로 가져오는 경우, 개인 액세스 토큰을 사용하여 GitHub 리포지토리를 가져올 수도 있습니다. 이 방법은 모든 사용자 활동(예 : 이슈 및 풀 리퀘스트)을 일치하는 GitLab 사용자와 연결하지 않으므로 권장하지 않습니다.
  • 자체 관리형 GitLab 인스턴스로 가져오는 경우, Sidekiq 작업자의 제약 없이 GitHub Rake 작업을 대신 사용하여 프로젝트를 가져올 수 있습니다.
  • GitHub Enterprise에서 자체 관리형 GitLab 인스턴스로 가져오는 경우, 먼저 GitHub 통합 사용 설정을 해야 합니다.
    • GitHub Enterprise에서 GitLab.com으로 프로젝트를 가져오려면 Import API를 사용하세요.
  • GitHub.com에서 자체 관리형 GitLab 인스턴스로 가져오는 경우, GitHub 통합을 설정할 필요가 없습니다. Import API를 사용할 수 있습니다.

작동 원리#

이슈와 풀 리퀘스트를 가져올 때 가져오기 도구는 GitLab 인스턴스의 데이터베이스에서 GitHub 작성자 및 담당자를 찾으려고 시도합니다. (GitLab에서는 풀 리퀘스트를 "Merge requests"라고 함)

이 연결이 성공하려면 저장소의 각 GitHub 작성자 및 담당자가 가져오기 전에 다음 조건 중 하나를 충족해야 합니다.

  • 이전에 GitHub 아이콘을 사용하여 GitLab 계정에 로그인
  • GitLab 계정의 이메일 주소와 일치하는 공개 이메일 주소가 있는 GitHub 계정 소유

GitHub 계정을 사용하는 GitLab 콘텐츠를 가져오려면 GitHub 공개 이메일 주소가 채워져야 합니다. 그러면 모든 코멘트와 기여가 GitLab의 동일한 사용자에게 올바르게 매핑됩니다. GitHub Enterprise(온 프레미스)에서는 제품을 사용하기 위해 이 필드를 채울 필요가 없으므로 가져온 콘텐츠가 새 시스템의 사용자에게 제대로 매핑되도록 기존 GitHub Enterprise 계정에 추가해야 할 수 있습니다. 해당 주소를 추가하는 방법에 대한 지침은 GitHub 설명서를 참조하십시오.

프로젝트에서 참조된 사용자가 GitLab 데이터베이스에 없는 경우, 프로젝트 작성자 (일반적으로 가져오기 프로세스를 시작한 사용자)가 작성자/담당자로 설정되지만, 원래 GitHub 작성자를 언급하는 이슈에 대한 메모가 추가됩니다.

가져오기 도구는 새 네임스페이스(그룹)가 존재하지 않는 경우 생성하거나, 네임스페이스를 사용하는 경우 가져오기 프로세스를 시작한 사용자의 네임스페이스 아래에 리포지토리를 가져옵니다. 적절한 권한으로 네임스페이스/리포지토리 이름을 편집할 수도 있습니다.

가져오기 도구는 오픈 풀 리퀘스트와 관련된 프로젝트 포크(Forks)의 브랜치도 가져옵니다. 이러한 브랜치는 GH-SHA-username/pull-request-number/fork-name/branch와 유사한 명명 체계를 사용하여 가져옵니다. 이로 인해 GitHub 리포지토리와 비교하여 브랜치에서 불일치가 발생할 수 있습니다.

추가 기술 세부 정보는 GitHub Importer 개발자 문서를 참조하세요.

가져오기 프로세스에 대한 개요는 GitHub에서 GitLab으로 마이그레이션 비디오를 참조하세요.

GitHub 리포지토리를 GitLab으로 가져오기#

GitHub Repository | 인포그랩 GitLab

GitHub 통합 사용#

시작하기 전에 GitLab 사용자에게 매핑하려는 GitHub 사용자가 다음 중 하나를 가지고 있는지 확인합니다.

사용자 일치 시도는 해당 순서로 진행되며, 사용자를 어떤 방식으로도 식별할 수 없으면, 작업은 가져오기를 수행하는 사용자 계정과 연관됩니다.

자체 관리형 GitLab 인스턴스를 사용 중이거나 GitHub Enterprise에서 가져오는 경우, 이 프로세스를 수행하려면 GitHub 통합을 구성해야 합니다.

  • 상단 내비게이션 바에서 [+] 아이콘을 클릭하고 New project를 선택하거나, 그룹에서 New project 버튼을 클릭합니다.
  • Create new project 페이지에서 Import project를 클릭합니다.
  • Import project 페이지에서 GitHub 버튼을 클릭합니다.
    Import project | 인포그랩 GitLab
  • Authenticate with GitHub 페이지에서 Authenticate with GitHub 버튼을 클릭합니다.
    Authenticate with GitHub | 인포그랩 GitLab
  • GitHubSign in 페이지로 리다이렉션 됩니다.
    Sign in to GitHub | 인포그랩 GitLab
  • GitHub에 로그인하면 Authorize GitLab.com 페이지로 이동됩니다.
    Authorize GitLab.com | 인포그랩 GitLab
  • Authorize GitLab.com 페이지의 Organization access 섹션에서 원하는 조직의 Grant 버튼을 클릭합니다.
  • Authorize gitlabhq 버튼을 클릭합니다.
  • 계속해서 가져올 리포지토리 선택을 진행합니다.

GitHub 토큰 사용#

개인 액세스 토큰을 사용하여 프로젝트를 가져오는 것은 권장되지 않습니다. GitLab.com 사용자인 경우, 개인 액세스 토큰을 사용하여 GitHub에서 프로젝트를 가져올 수 있지만, 이 방법은 모든 사용자 활동(예 : 이슈 및 풀 리퀘스트)을 일치하는 GitLab 사용자와 연결할 수 없습니다. 자체 관리형 GitLab 인스턴스의 관리자이거나 GitHub Enterprise에서 가져오는 경우, 개인 액세스 토큰을 사용할 수 없습니다. GitHub 통합 방법(위)은 모든 사용자에게 권장됩니다. 작동 원리 섹션에서 자세히 알아보세요.

GitHub 통합을 사용하지 않는 경우에도 GitHub으로 인증을 수행하여 GitLab에 리포지토리 액세스 권한을 부여할 수 있습니다.

GitHub에서 다음을 수행하여 GitLab과 연동하기 위한 Personal access token을 생성합니다.

  • 우측 상단의 프로필 사진을 클릭한 다음 Settings를 클릭합니다.

  • Account settings 사이드 바에서 Developer settings를 클릭합니다.

  • 사이드 바에서 Personal access tokens를 클릭합니다.

  • Generate new token 버튼을 클릭합니다.

  • New personal access token 페이지에서 Note 필드에 원하는 Token 이름(예: gitlab)을 입력하고 repo 스코프를 체크한 다음, Generate token 버튼을 클릭합니다.

    New personal access token | 인포그랩 GitLab
  • 토큰이 생성되어 화면에 출력되면 복사하여 기록해 둡니다.

    이때 토큰을 저장하지 않으면 다시 볼 수 없습니다.

  • GitLab으로 돌아가서 Authenticate with GitHub 페이지의 Personal Access Token 필드에 기록해 둔 토큰을 복사하여 붙여넣고 Authenticate 버튼을 클릭합니다.

  • Import repositories from GitHub 페이지로 이동되면, 가져올 리포지토리의 GitLab 네임스페이스를 검색하여 선택한 다음, Import 버튼을 클릭하여 가져오기를 진행합니다.

가져올 리포지토리 선택#

GitHub 리포지토리에 대한 액세스를 승인하면 GitHub에서 가져오기 페이지로 리디렉션되고 GitHub 리포지토리가 나열됩니다.

  • 기본적으로 제안된 리포지토리 네임스페이스는 GitHub에 존재하는 이름과 일치하지만, 권한에 따라 이러한 이름을 가져오기 전에 편집하도록 선택할 수 있습니다.
  • 원하는 수의 리포지토리 옆에 있는 Import 버튼을 클릭하거나, 모든 리포지토리를 가져오려면 Import OO repositories 버튼을 클릭합니다. 또한 이름으로 프로젝트를 필터링할 수 있습니다. 필터가 적용된 경우, 모든 리포지토리 가져오기는 일치하는 리포지토리만 가져옵니다.
  • Status 컬럼은 각 리포지토리의 가져오기 상태를 보여줍니다. 페이지를 열어 두도록 선택할 수 있으며 실시간으로 업데이트되거나 나중에 다시 돌아갈 수 있습니다.
  • Import repositories from GitHub 페이지에서 가져올 리포지토리의 GitLab 네임스페이스를 검색하여 선택한 다음 Import 버튼을 클릭합니다.
    Import repositories from GitHub | 인포그랩 GitLab
  • 잠시 후 Importing이 완료되어 Status가 Complete로 변경되면 Go to project 버튼을 클릭하여 마이그레이션 된 GitLab 프로젝트로 이동합니다.
    Imported GitLab project | 인포그랩 GitLab

GitLab으로 가져오기 결과#

위의 이미지와 같이 GitHub의 리포지토리 설명, Git repository 데이터(커밋 이력 및 파일)를 GitLab 프로젝트의 Repository로 가져온 것을 확인할 수 있습니다.

아래와 같이 마일스톤을 가져옵니다. GitHub에서는 풀 리퀘스트(Pull requests)도 포함되어 진도율은 차이가 있습니다.

GitHub Milestone | 인포그랩 GitLab
GitLab Milestone | 인포그랩 GitLab

GitHub 리포지토리가 생성될 때 기본으로 포함되는 기본 레이블(Default labels)뿐만 아니라 custom label과 같이 사용자가 추가로 생성한 사용자 정의 레이블도 가져옵니다.

GitHub Labels | 인포그랩 GitLab
GitLab Labels | 인포그랩 GitLab

마일스톤 및 레이블 등 참조 정보를 포함한 이슈를 가져옵니다.

GitHub Issues | 인포그랩 GitLab
GitLab Issues | 인포그랩 GitLab

GitHub의 풀 리퀘스트(Pull requests)를 GitLab 머지 리퀘스트(Merge requests)로 가져옵니다.

GitHub Pull requests | 인포그랩 GitLab
GitLab Merge requests | 인포그랩 GitLab

미러링 및 파이프라인 상태 공유#

GitLab 등급(Tier)에 따라 가져온 리포지토리를 GitHub 사본과 동기화 상태로 유지하도록 리포지토리 미러링을 설정할 수 있습니다.

또한 GitHub 프로젝트 통합을 사용하여 파이프라인 상태 업데이트를 GitHub으로 다시 보내도록 GitLab을 구성할 수 있습니다. (PREMIUM)

외부 리포지토리용 CI/CD를 사용하여 프로젝트를 가져오면, 위의 두 가지가 모두 자동으로 구성됩니다. (PREMIUM)

자체 관리형 인스턴스에서 가져오기 속도 향상#

GitLab 서버에 대한 Administrator 권한이 필요합니다.

대규모 프로젝트의 경우 모든 데이터를 가져오는 데 시간이 걸릴 수 있습니다. 필요한 시간을 줄이기 위해, 다음 대기열을 처리하는 Sidekiq 작업자 수를 늘릴 수 있습니다.

  • github_importer
  • github_importer_advance_stage

최적의 환경을 위해, 이러한 대기열만 처리하는 Sidekiq 프로세스(각각 CPU 코어 수와 같은 수의 스레드를 실행)를 4개 이상 갖는 것이 좋습니다. 또한, 이러한 프로세스는 별도의 서버에서 실행하는 것이 좋습니다. 코어가 8개인 4개의 서버는 최대 32개의 개체(예 : 이슈)를 병렬로 가져올 수 있습니다.

네트워크 처리량, CPU 용량 및 Git 리포지토리를 저장하는 디스크(GitLab 인스턴스용)의 디스크 성능(예 : 고성능 SSD 사용)을 늘리면 리포지토리 복제(cloning)에 소요되는 시간을 줄일 수 있습니다. Sidekiq 작업자 수를 늘려도 리포지토리 복제에 소요되는 시간이 줄어들지 않습니다.

깃랩 문서 바로가기