😆 Big Data/- etc (OS, Linux)

[git] 자세하게 GitLab -> GitHub 대용량 프로젝트 이동 (lfs, bfg 등)

또방91 2022. 7. 13. 08:49
728x90

 

 

 

 

 

[git] 자세하게 GitLab -> GitHub 대용량 프로젝트 이동(lfs, bfg 등)

- 나중에 필요할 지 모르니, 자세하게 적어보려한다! -

 

 

 

하.............

엄청난 인내심을 발휘했던!!

프로젝트 이동시키는 방법에 대해 쓰려한다..

ㅠㅠㅠㅠㅠ

정말 한달 걸렸다..ㅜㅜㅜ

너무나도 많은 오류와 첨 보는 오류....

알수 없는 오류 사유로 인해서...

 

일단 옮기려는 GitLab 프로젝트가    대용량 파일과   대용량 커밋 유무  에 대해 알아야한다!

 

대용량 파일  /  대용량 커밋 해결 방법
파일커밋 모두 대용량 아님 🌞 Solution_1   기본방법
파일대용량 🌞 Solution_2   LFS 방법
파일커밋 모두 대용량이면 🌞 Solution_3  BFG repo-clean & LFS 방법

 

나의 경우는 파일과 커밋이 모두 대용량이었어서   < 🌞 Solution_3 BFG repo-clean & LFS 방법 >이었다!

 

 

 

🌞 Solution_1  기본 방법                                                                                                  

일단 기본방법에 대해 알아보자

1.  클론할 로컬위치에서 터미널을 열기

이때 클론하는 로컬공간을, 대용량 커밋과 대용량 파일을 다듬을 공간이라고 생각하면 된다.

2.  Clone, Push

git clone --bare 🧡이동할 gitlab http주소🧡   #옮길 깃랩repo clone

cd 🧡만들어진 gitlab폴더🧡   #폴더로 이동

git push --mirror 🧡옮길 새로운 github🧡    #새로운 깃헙repo push

 

 


 

🌞 Solution_2  LFS 방법                                                                                                      

1.  클론할 로컬위치에서 터미널을 열기

이때 클론하는 로컬공간을, 대용량 커밋과 대용량 파일을 다듬을 공간이라고 생각하면 된다.

2.  Clone, Push

git clone --bare 🧡이동할 gitlab http주소🧡   #옮길 깃랩repo clone

cd 🧡만들어진 gitlab폴더🧡   #폴더로 이동

git lfs fetch -all  # repo의 대용량파일 가져오기

git push --mirror 🧡옮길 새로운 github http주소🧡    #새로운 깃헙repo로 push

git lfs push --all 🧡옮길 새로운 github http주소🧡    #새로운 깃헙repo로 대용량파일 push

 

 


 

🌞 Solution_3  BFG repo-clean & LFS 방법                                                                      

lfs로 했는데도 실패가 된 상황... 여기까지 오신 분들 참 고생 많으셨다 😂

나도 참 고생고생.......ㅋㅋㅋ

마지막 방법!! BFG repo-cleaner 방법으로 해보자!!

 

1.  BFG Repo-Cleaner 다운받기

https://rtyley.github.io/bfg-repo-cleaner/

홈페이지 들어가기 귀찮으면 아래 그림에 파일 다운 링크 걸어놨다!!

👇👇 아래 그림 클릭 👇👇

 

2.  java 다운 받기

: 다운받은 BFG 파일이 java로 만들어진 jar파일이다보니

java 설치환경변수를 설정해줘야 한다.

아래 잘 정리 된 포스팅 글 들어가서 java  설치해보긔!!

  👉   https://languagestory.tistory.com/11

 

윈도우 JDK(JAVA Development Kit) 설치

1. 시험환경 ˙ 윈도우 ˙ JDK 17 Win x64 2. 목적 ˙ 윈도우 환경에서 JDK를 설치한다. ˙ 설치한 JDK 환경을 설정한다. 3. 적용 ① 오라클 다운로드 센터에서 JDK for Developers를 클릭한다. - URL : ht..

languagestory.tistory.com

 

3.  본격 옮기기 전 해야할 일

1) Github에 옮겨놓을 새로운 Repository 만들기

   - 뭐 당연한 거겠쥬??  README는 쓸 필요없다! 어차피 깃랩 repo 옮겨오니까 사라진다.. ㅋㅋ

 

2) default branch 이름 동일하게 맞추기 (아래 캡쳐본 참고하기!)

 ✨오류 미리 피하기    -  다 진행하면서 수도 없이 오류를 맞딱드리면서 안 사실인데,
깃헙과 깃랩의 defalt 브랜치 이름이 다르다보니 기존 깃헙default를 삭제하려는데
삭제 못한다면서 이런 오류가 뜨니까 충돌나기 전 이름을 바꿔놓았다!

 

3) Gitlab Branch protect  해제하기

 ✨오류 미리 피하기    옮겨야할 gitlab의 브랜치가 protect 설정되어 있으면 안옮겨지는 오류가 생긴다.

 

4. BFG Repo-Cleaner 100MB이상 대용량 히스토리 정리하기

 

4_1) 깃랩 http주소를 복사한다 

: 옮길 깃랩 repository http주소를 복사한다.

 

4_2) 클론할 로컬위치에서 터미널을 열기

이때 클론하는 로컬공간을, 대용량 커밋과 대용량 파일을 다듬을 공간이라고 생각하면 된다.

4_3) 클론

 
git clone --mirror 🧡복사한 깃랩 http 주소🧡

# 예시 : git clone --mirror https://gitlab.com/LIMSONA/kdt_project_real.git

4_3) 완료

 

 

4_4) 같은 디렉토리에 다운받은 bf-1.14.0.jar 파일을 위치한다.

4_5) 대용량 파일 삭제

 ✨오류 미리 피하기    java 설치 & java 환경변수 설정이 정상적으로 안되어있다면 java 명령어가 안먹힐 수 있으니 위에 '2.java 설치'를 다시한번 보고 오길!

 

java -jar bfg-1.14.0.jar --strip-blobs-bigger-than 100M 🧡생성된 .git으로 끝나는 폴더🧡

# 예시 java -jar bfg-1.14.0.jar --strip-blobs-bigger-than 100M kdt-project-real.git/

4_5) 완료

 

4_6) 삭제 내용 적용

cd 🧡클론된 .git 폴더🧡  #생성된 폴더 디렉토리로 이동
#예시 : cd kdt-project-real.git

git reflog expire --expire=now --all && git gc --prune=now --aggressive

4_6) 완료

 

5.  BFG & LFS 사용하기

5_1) 커밋 히스토리 내에서 대용량 파일 찾기

cd ..  # 상위 디렉토리로 이동

# 커밋 히스토리 내에서 대용량 파일 찾기
git filter-branch --tree-filter 'git lfs track "*.{🧡찾고싶은 대용량파일형식🧡}"' -- --all
# 예시: git filter-branch --tree-filter 'git lfs track "*.{pt,npy}"' -- --all
 ✨오류 미리 피하기    조회하는 와중 오류가 아래그림처럼 발생하였다!
파일디렉토리 이름이 이상한 경우, 커밋자체에 오류가 있었던 경우 등 다양한 이유라고 하는데
해결방법은 해당 커밋을 삭제하니 잘 진행되었다.
삭제방법은 ' git log '를 쳐보면 커밋한 내역이 뜬다.  ▶ 그 상태에서 ' / ' 슬러시를 치고 아까 복사한 커밋 아이디를 붙여넣기하여 검색해본다. (#예시 /a1b3c45d6e7f8g9 ) ▶ git reset --soft 이전커밋id
(* git reset 방법 참고 : https://www.devpools.kr/2017/02/05/%EC%B4%88%EB%B3%B4%EC%9A%A9-git-%EB%90%98%EB%8F%8C%EB%A6%AC%EA%B8%B0-reset-revert/ )

🔆아래와 같은 오류가 안뜰수도 있다! 내 경우는 떴다보니, 해결방법을 적어보았다!

 

 

5_2) BFG를 이용하여 찾은 파일들을 Git LFS로 변경하기

java -jar 🧡bfg파일(디렉토리포함)🧡 --convert-to-git-lfs '*.🧡대용량파일형식🧡'
git reflog expire --expire=now --all && git gc --prune=now --aggressive


#예시 : 내 경우엔 2개 파일형식이어서 각각 해줘야한다.
java -jar /d/clone_project/bfg-1.14.0.jar --convert-to-git-lfs '*.pt'
git reflog expire --expire=now --all && git gc --prune=now --aggressive

java -jar /d/clone_project/bfg-1.14.0.jar --convert-to-git-lfs '*.npy'
git reflog expire --expire=now --all && git gc --prune=now --aggressive

 

5_3) 새로운 저장소로 push하기

cd 🧡클론된 .git 폴더🧡  #생성된 폴더 디렉토리로 이동
#예시 : cd kdt-project-real.git

# push하기
git push --mirror 🧡새로운 github repository http주소🧡
# 예시: git push --mirror https://github.com/LIMSONA/Live_streaming_chat_AI_dashboard_project.git

 

 

 

 

 

 

 

 

 

 

참고:

* git 이동:  https://hongjuzzang.github.io/howto/git_mirror/#repository-a%EB%A5%BC-repository-b%EB%A1%9C-%EC%98%AE%EA%B8%B0%EA%B8%B0

* BFG파일 실행을 위한 자바설치: https://languagestory.tistory.com/11

* BFG :  https://blog.naver.com/PostView.naver?blogId=nan17a&logNo=222440850014&parentCategoryNo=6&categoryNo=8&viewDate=&isShowPopularPosts=false&from=postView 

* BFG&LFS 방법

- https://codingbetterthangame.tistory.com/203 

https://lazyren.github.io/devlog/gitlab-to-github-repo-clone.html#100mb%EB%A5%BC-%EB%84%98%EC%96%B4%EA%B0%80%EB%8A%94-%ED%81%AC%EA%B8%B0%EC%9D%98-%ED%8C%8C%EC%9D%BC%EC%9D%84-%EC%A7%80%EB%8B%8C-%EC%A0%80%EC%9E%A5%EC%86%8C-%EB%AF%B8%EB%9F%AC%EB%A7%81%ED%95%98%EA%B8%B0

 

 

728x90