희진Go!

Email : heejin_go@naver.com / Insta : @ggame.mag / git : https://github.com/heejin8273

Data Engineering

GitLab → GHE 레포지토리 이관 방법 (2가지)

진고 2026. 5. 14. 20:24

 

GitLab에 있는 레포지토리를 GitHub Enterprise(GHE)로 이관하는 방법을 정리한 문서입니다.

본인은 일반 clone 방식을 사용하며, 대용량 파일이 포함된 경우의 처리 방법(Git LFS)도 함께 다룹니다.

방법 1: 전체 이관 (모든 브랜치/태그) - Mirror 방식

모든 refs(브랜치, 태그, notes 등)를 통째로 옮기는 방법입니다.

# 1. GitLab 레포를 mirror 모드로 bare clone
#    - 모든 refs(브랜치, 태그, notes 등)를 그대로 가져옵니다
git clone --mirror https://gitlab.com//.git

cd .git

# 2. GHE에 빈 레포 생성 후, 해당 URL로 mirror push
#    - --mirror는 모든 refs를 그대로 복제 푸시합니다 (강제 갱신 포함)
git push --mirror https://github.com//.git

특징

  • ✅ 모든 브랜치, 태그, refs를 한 번에 이관
  • ⚠️ GHE 쪽 기존 내용을 덮어쓸 수 있음 (빈 레포에서만 사용 권장)
  • ⚠️ bare clone이라 작업 디렉토리 없음

방법 2: 특정 브랜치만 이관 - 일반 Clone 방식

원하는 브랜치만 골라서 안전하게 옮기는 방법입니다.

# 1. 일반 clone (mirror 아님)
git clone https://gitlab.com//.git
cd 

# 2. 옮기고 싶은 브랜치로 체크아웃
git checkout 

# 3. GHE를 새 remote로 등록
git remote add ghe https://github.com//.git

# 4. 해당 브랜치만 푸시 (빈 레포면 -f 불필요)
git push ghe 

특징

  • ✅ 옮길 브랜치만 선별 가능
  • ✅ GHE에 기존 내용이 있어도 안전 (force 아님)
  • ✅ 잔여 브랜치 정리하면서 이관 가능
  • 여러 브랜치 옮기려면 2번과 4번 단계 반복

 

🚨 대용량 파일로 인한 푸시 실패 해결

문제 상황

GHE의 파일 크기 제한(100MB)을 초과하는 파일이 히스토리에 포함되어 있으면 푸시가 거부됩니다.

remote: error: File ... is 405.06 MB; this exceeds GitHub Enterprise's file size limit of 100.00 MB
remote: error: GH001: Large files detected.
! [remote rejected]   develop -> develop (pre-receive hook declined)

핵심 개념

  • GitLab UI에서 파일이 안 보이더라도 과거 커밋 히스토리에는 남아있을 수 있음
  • Git은 푸시 시 현재 파일이 아닌 전체 히스토리를 전송
  • GitLab은 파일 크기 제한이 관대하지만, GHE는 엄격함 (100MB)

히스토리에서 대용량 파일 확인하는 방법

# 특정 파일이 히스토리에 있는지 검색
git log --all --full-history -- "파일경로/파일명"

# 히스토리의 대용량 파일 TOP 20 확인
git rev-list --objects --all | \\
  git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' | \\
  awk '/^blob/ {print $3, $4}' | \\
  sort -rn | \\
  head -20

💾 Git LFS로 대용량 파일 처리하기

대용량 파일이 계속 필요한 경우 Git LFS를 사용합니다.

1. Git LFS 설치

brew install git-lfs
git lfs install
git lfs version  # 설치 확인

2. 기존 히스토리의 대용량 파일을 LFS로 마이그레이션

git lfs migrate import \\
  --include="*.csv,*.parquet,*.npy,*.pt,*.index" \\
  --everything

💡 --everything 옵션은 모든 브랜치와 태그를 함께 처리합니다.

⚠️ 이 작업은 커밋 히스토리를 다시 쓰기 때문에 commit hash가 변경됩니다.

3. 마이그레이션 결과 확인

git lfs ls-files

LFS로 추적되는 파일 목록이 출력됩니다.

4. 강제 푸시

이전에 푸시 시도가 있었다면 force push가 필요합니다.

git push ghe develop --force

성공 시 출력 예시:

Uploading LFS objects: 100% (375/375), 3.1 GB | 29 MB/s, done.
* [new branch]        develop -> develop

5. 태그도 함께 푸시 (선택사항)

git push ghe --tags --force

 

'Data Engineering' 카테고리의 다른 글

[Airflow] Google 앱 비밀번호 설정  (0) 2025.12.03