100mb 넘는 파일이 있는 gitlab → github 미러링

1vl·2022년 10월 14일
1

이 글은 본인이 나중에 찾아보기 편하게 기록을 위해 적었습니다.


깃랩에서 열심히 작업한 프로젝트를 깃허브로 옮기려고 했는데, 깃랩은 lfs가 이미 활성화된 상태여서 100mb가 넘는 산출물인 apk 파일을 커밋할 때 문제가 없었지만, [Settings] - [Repository] - [Mirroring repositories] 기능을 통해 깃허브로 미러링하는데 대략 아래와 같은 에러가 발생했다.

push to mirror: git push: exit status 1, stderr:
"remote: warning: File exec/BackEnd-0.0.1-SNAPSHOT.jar is 57.89 MB;
this is larger than GitHub's recommended maximum file size of 50.00 MB
remote: warning: File exec/*****.apk is 97.88 MB;
this is larger than GitHub's recommended maximum file size of 50.00 MB
remote: error: Trace: 
remote: error: See http://git.io/iEPt8g for more information.
remote: error: File exec/*****.apk is 181.18 MB;
this exceeds GitHub's file size limit of 100.00 MB
remote: error: GH001: Large files detected.
You may want to try Git Large File Storage - https://git-lfs.github.com.
To https://<새로운 git 주소(github)>
! [remote rejected] develop -> develop (pre-receive hook declined)
...

구글링을 통해 찾아본 결과, 방법을 찾아서 실행했고, 성공적으로 깃허브로 미러링할 수 있었다.

  1. GIT LFSBFG Repo Cleaner 설치

  2. 복사하고자 하는 저장소의 bare clone 생성

git clone --mirror https://gitlab.com/exampleuser/old-repository.git

클론 후에는 대략 아래와 같은 폴더들이 old-repository.git 폴더 안에 생성된다.
1번에서 다운로드 받은 bfg의 jar 파일을 해당 경로에 넣어주자.

3. commit history에서 large file을 찾아 트랙킹(ex: apk, jar 확장자를 가진 파일)

git filter-branch --tree-filter 'git lfs track "*.{apk,jar}"' -- --all
  1. old-repository.git 폴더로 진입해 3번에서 트랙킹한 파일들을 BFG를 이용하여 git lfs로 변경한다.
cd old-repository.git
java -jar bfg-1.14.0.jar --no-blob-protection --convert-to-git-lfs '*.apk'
java -jar bfg-1.14.0.jar --no-blob-protection --convert-to-git-lfs '*.jar'
  1. 새로운 저장소로 mirror-push
git push --mirror <git 저장소>


다른 게시글들에서 이런 상황은 별로 다루지 않아 이 부분이 가장 헷갈렸었다. 나만 겪은 증상인가?

Compressing objects 단계가 완료되었다는 메세지 이후로 아무런 메시지도 출력이 되지 않고, 다시 새로운 명령어를 입력할 수 있는 상태인 $ 표시가 나타나지도 않는 것이었다.

다음 단계가 진행 중이라는 메세지가 출력되지 않는데다가 반응이 없는 gitbash 콘솔을 보며 괜히 '이거 뭔가 에러난거 아냐?' 하면서 끄고 다시하고를 몇 번 했는데...
결론은 이런 상황에서도(비록 보이지는 않지만) 작업은 진행 중이라는 사실...
몇 번 껐다 키면서 진행 상황이 보일때는 또 보여서 더 아리송했었다.

  1. 1번에서 생성된 저장소 삭제

참고: https://hongjuzzang.github.io/howto/git_mirror/
https://velog.io/@sugenius77/Gitlab%EC%97%90%EC%84%9C-Github%EB%A1%9C-%EB%AF%B8%EB%9F%AC%EB%A7%81 https://gyoogle.dev/blog/github/GitHub%20repository%20%EB%AF%B8%EB%9F%AC%EB%A7%81.html

profile
React-Native, Flutter, Java, Spring, lua

0개의 댓글