[Github] GitLab → Github (feat. BFG)

2024. 12. 8. 22:44Tools/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 Repo-Cleaner by rtyley

$ bfg --strip-blobs-bigger-than 100M --replace-text banned.txt repo.git an alternative to git-filter-branch The BFG is a simpler, faster alternative to git-filter-branch for cleansing bad data out of your Git repository history: Removing Crazy Big Files Re

rtyley.github.io

 

BFG는 Git 저장소 기록에서 불필요한 데이터를 정리하기 위한 도구다.

 

git-filter-branch의 더 간단하고 빠르다고 주장한다. (실행시켜 보니 맞는 거 같다.)

 

대용량 파일 제거, 비밀번호, 인증 정보 및 기타 개인 데이터 제거에 특화되어 있다.

 

BFGgit-filter-branch보다 좋은 이유는 다음과 같다.

  • 속도: 10-720배 더 빠름
  • 단순성: 사용하기 쉽게 설계됨
  • 확장성: Scala 언어를 사용하여 커스터마이징 가능

 


가. 설치

 

 

BFG Repo-Cleaner by rtyley

$ bfg --strip-blobs-bigger-than 100M --replace-text banned.txt repo.git an alternative to git-filter-branch The BFG is a simpler, faster alternative to git-filter-branch for cleansing bad data out of your Git repository history: Removing Crazy Big Files Re

rtyley.github.io

 

 

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에 추가한다.

 


 

  • 참고
 

깃허브에 실수로 개인정보를 커밋했다면? BFG 사용하기!

개발 초보라면 비슷한 경험이 있을 수 있었으리라 생각한다. 첫 개발하던 프로젝트에서는 AWS IAM 개인키를 실수로 깃허브에 올려 이런 무서운 메일도 받아봤다.. 이 때의 대참사 이후 깃허브에

velog.io

 

gitlab에서 github로 저장소(repository) commit log를 유지하며 클론하기

대학교에서 진행하는 모든 과제는 학교와 연동된 gitlab의 private repo 이다 보니 학기가 끝나고 github로 정리할 방법이 없을까 하다가 좋은 방법을 발견하여 번역해 봅니다. 이 방법을 통해서 미러

lazyren.github.io

 

'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