이 글에서는 GitLab의 ‘Project Import’ 기능을 활용해 GitHub에서 GitLab으로 프로젝트를 마이그레이션 하는 방법을 소개합니다. 아울러 GitHub Actions에서 GitLab 파이프라인으로 수동 마이그레이션 하는 방법도 알아봅니다. A 플랫폼에서 B 플랫폼으로 마이그레이션 하는 과정을 복잡하고 어렵게 느끼는 분들도 있을 텐데요. GitLab에서는 마우스 클릭 몇 번으로 쉽고 간단하게 마이그레이션을 진행할 수 있습니다.
사전 준비
- GitLab 관리자가 GitHub에서 프로젝트 소스를 가져오는 기능을 활성화해야 합니다.
- 대상이 되는 GitLab 프로젝트 그룹에 Maintainer 이상 권한이 있어야 합니다.
- GitLab 이메일 주소와 일치하는 GitHub 공개 이메일 주소가 있어야 합니다.
- GitHub 계정에는 GitHub 공개 이메일 주소가 있어야 합니다. 이는 모든 Comment와 Contribution이 GitLab에서 동일한 사용자에게 올바르게 대응되기 위함입니다.
GitHub 리포지터리를 GitLab으로 가져오기
1. GitHub과 연동하기
GitHub과의 통합은 GitLab.com에서 기본으로 활성화되어 있습니다.
자체 관리형 GitLab 인스턴스를 사용 중이거나 GitHub Enterprise에서 가져올 때, 이 프로세스를 수행하려면 GitHub 통합을 구성해야 합니다.
- GitLab 홈페이지 왼쪽 사이드바에서 Projects를 누른 다음, Projects 페이지 오른쪽 상단에서 New Project 버튼을 클릭합니다.
- 그다음, Import project 상자를 클릭합니다.

- Import project 페이지에서 GitHub 버튼을 누릅니다.
- Authenticate with GitHub 버튼을 클릭합니다.
Personal Access Token을 사용하여 GitLab.com으로 가져올 수도 있습니다.

- GitHub에 로그인합니다.
- 마이그레이션 하려는 프로젝트가 저장된 GitHub 조직명 맨 오른쪽에 Grant 버튼을 클릭합니다.
- Authorize gitlabhq 버튼을 클릭해 선택한 조직에 GitLab 액세스 권한을 부여합니다.

2. 프로젝트 가져오기
GitHub 리포지터리의 액세스를 승인하면 GitHub에서 리포지터리 가져오기(Import repositories from GitHub) 페이지로 리디렉션되고 GitHub 리포지터리가 나열됩니다.
-
프로젝트에서 가져올 항목을 Advanced import settings에서 선택합니다. Import issue and pull request events를 클릭해 추가 항목을 가져오겠습니다.
마이그레이션 하려는 항목이 많을수록 가져오는 데 시간이 더 오래 걸립니다.
프로젝트에서 가져올 항목을 GitLab ‘GitHub import’ 페이지에서 선택한 모습. 출처=GitLab
-
GitHub 프로젝트를 마이그레이션 할 GitLab 경로를 지정한 후, Import 버튼을 누르면 가져오기가 시작됩니다.
GitLab ‘GitHub import’ 페이지에서 GitHub 프로젝트 마이그레이션 경로를 지정한 모습. 출처=GitLab
-
UI에서 진행 상황을 볼 수 있습니다.
-
가져오기가 완료되면, 상태가 ‘complete’로 바뀝니다.
3. 결과 확인
상태가 Complete로 변경되면 지정한 경로로 이동해 마이그레이션 된 프로젝트를 볼 수 있습니다.

-
마이그레이션 된 프로젝트는 다음 항목의 데이터를 가져옵니다.
- 리포지터리 설명
- Git 리포지터리 데이터
- 브랜치 보호 규칙 (GitLab 15.4에서 도입되었습니다.)
- 협업자(구성원) (GitLab 15.10에 도입되었습니다. GitLab 16.0부터 추가 항목으로 가져올 수 있습니다.)
- 이슈
- Pull requests(PR)
- Wiki 페이지
- 마일스톤
- Labels
- 릴리즈 노트 내용
- 첨부파일
- 릴리즈 노트 (GitLab 15.4에 도입되었습니다.)
- 댓글 (GitLab 15.5에 도입되었습니다.)
- 이슈 설명 (GitLab 15.5에 도입되었습니다.)
- PR 설명 (GitLab 15.5에 도입되었습니다.)
- PR 리뷰 댓글
- 일반 이슈 및 PR 댓글
- Git Large File Storage(LFS) 오브젝트
- PR 리뷰
- PR 지정 리뷰어 (GitLab 15.6에 도입되었습니다.)
- PR ‘merge된’ 정보
- 토론에서 PR 댓글의 답글 (GitLab 14.5에 도입되었습니다.)
- PR 리뷰 댓글 제안 (GitLab 14.7에 도입되었습니다)
- 이슈 이벤트와 PR 이벤트 (GitLab 15.4에 github_importer_issue_events_import 기능 플래그를 기본적으로 비활성화하면서 도입되었습니다. GitLab 15.5부터 추가 항목으로 가져올 수 있습니다.)
-
브랜치 보호 규칙 및 프로젝트 설정 대응
GitLab 15.4 버전부터 도입되었습니다.
GitHub 브랜치 보호 규칙은 GitLab의 브랜치 보호 규칙이나 GitLab 프로젝트 수준 설정값으로 대응됩니다.
GitHub 규칙 GitLab 규칙 도입된 버전 Pull Request(PR)를 merge 하기 전에 모든 토론이 해결된 상태여야 합니다. Merge Request(MR)를 merge 하기 전에 모든 토론 스레드를 완료해야 합니다.(프로젝트 설정) GitLab 15.5 merge 하기 전에 PR이 필요합니다. ‘Allowed to push and merge’ 설정에서 ‘No one’ 옵션이 선택됩니다.(브랜치 보호 규칙) GitLab 15.5 프로젝트의 기본 브랜치에 서명된 커밋이 필요합니다. 유효한 키로 서명되지 않은 커밋을 거부합니다.(푸시 규칙) 이 기능은 GitLab Premium 전용 기능입니다. GitLab 15.5 강제 푸시 허용 - 모두 강제 푸시 허용 - (브랜치 보호 규칙) GitLab 15.6 merge 전 PR에 코드 소유자의 검토 필요 merge 전 MR에 코드 소유자 검토 필요(브랜치 보 호 규칙) 이 기능은 GitLab Premium 전용 기능입니다. GitLab 15.6 merge 전 PR 요청을 우회하는 사용자 설정 푸시 및 merge 허용 설정(브랜치 보호 규칙). 단, GitLab Premium 구독이 없으면 특정 사용자를 직접 지정하는 것이 아니라, 사용자 역할을 기반으로 한 권한 설정으로 제한됩니다. GitLab 15.8 -
권한 대응(구성원)
GitLab 15.10 버전부터 도입되었습니다.
협업자/구성원을 마이그레이션 할 때, GitHub 권한은 아래와 같은 GitLab 구성원 권한에 대응됩니다.
GitHub role Mapped GitLab role Read Guest Triage Reporter Write Developer Maintain Maintainer Admin Owner
GitHub Actions를 GitLab 파이프라인으로 수동 마이그레이션
지금까지 GitHub에서 프로젝트를 마이그레이션 했습니다. 이제 GitHub Actions를 GitLab 파이프라인으로 마이그레이션 하겠습니다.