2024. 12. 8. 22:44ㆍTools/GitHub
GitLab에 저장된 작업물을 Github으로 옮기는 방법을 정리해 보았습니다.
1. Remote 변경하기
기존의 GitLab Repo를 clone하고 remote를 Github Repo로 수정한다.
이를 위해선 Github에 새로운 Repo가 생성되어있어야 한다.
git clone https://old_git.git
cd old_git/
git remote remove origin
git remote add origin https://github.com/new_azgit.git
git branch -M main
git push origin
git clone --branch master --single-branch https://old_git.git
: 하나의 branch만 clone하고 싶은 경우.
2. BFG
GitLab과 다르게 Github은 100mb 이상의 파일을 허용하지 않는다.
이에 모든 커밋 기록에서 100mb 이상의 파일을 찾아서 지워야 한다.
이를 git-filter-branch
또는 BFG
를 사용할 수 있다.
둘 중에 BFG
를 사용해서 진행한다.
BFG
는 Git 저장소 기록에서 불필요한 데이터를 정리하기 위한 도구다.
git-filter-branch
의 더 간단하고 빠르다고 주장한다. (실행시켜 보니 맞는 거 같다.)
대용량 파일 제거, 비밀번호, 인증 정보 및 기타 개인 데이터 제거에 특화되어 있다.
BFG
가 git-filter-branch
보다 좋은 이유는 다음과 같다.
- 속도: 10-720배 더 빠름
- 단순성: 사용하기 쉽게 설계됨
- 확장성: Scala 언어를 사용하여 커스터마이징 가능
가. 설치
BFG를 위해서는 준비물이 있다.
Java 8 이상의 JRE가 필요하다.
준비되었다면 우측의 Download를 눌러서 jar 파일을 다운로드한다.
나. 실행
git clone --branch master --single-branch https://old_git.git
cd old_git/
java -jar path/to/bfg-1.14.0.jar --strip-blobs-bigger-than 100M --no-blob-protection
git reflog expire --expire=now --all && git gc --prune=now --aggressive
git remote remove origin
git remote add origin https://github.com/new_azgit.git
git branch -M main
git push origin --force --all
git push origin --force --tags
--no-blob-protection
: BFG의 보호 기능을 비활성화하고 모든 기록에서 타깃 파일 삭제.
BFG 보호 기능 |
BFG는 기본적으로 master (혹은 HEAD) 브랜치의 최신 커밋은 수정하지 않는다. 이는 최신 커밋은 실제 배포할 제품이고 무분별한 삭제는 하드코딩된 데이터의 손실로 인한 장애로 이어질 수 있기 때문이다. 그래서 최신 커밋에 한정하여 직접 수정하길 권장하는 것 같다. |
3. Github email 추가
가끔 GitLab에서 Github으로 옮기면 잔디가 심기지 않는 경우가 있다.
이는 GitLab에서 커밋할 때 사용한 이메일과 Github에 등록된 이메일이 다른 경우 발생한다.
Github에 해당 이메일을 추가하면 된다.
GitLab에서 커밋할 때 사용한 이메일을 Github에 추가한다.
- 참고
'Tools > GitHub' 카테고리의 다른 글
[Github] Branch Ruleset (0) | 2024.12.09 |
---|---|
[Github] 문서화를 위한 action (Doxygen) (0) | 2023.06.25 |
[Github] Projects (0) | 2023.04.11 |
[Github] Branch Protection rules (0) | 2023.04.11 |
[Github] Git flow (0) | 2023.04.11 |