gitlab에서 진행하던 프로젝트를 Github으로 미러링 하던 중 커밋 했었던 MySQL 덤프파일의 크기가 100MB를 초과하여 미러링에 실패하는 상황에 직면하였습니다.
그리하여 찾아본 해결 방법으로 첫째에는 filter-branch 를 이용한 방법이었는데, 잘 따라했다 싶었지만 repository에 있는 덤프파일의 commit 기록은 그대로 남아 있었습니다. 그래서 찾아보던 중 다른 방법인 BGF Repo Cleaner 를 이용한 방법을 진행하게 되었습니다.
따라하는 과정에서 검색을 통해서 많은 블로그들을 참고하게 되었는데 감사합니다. 큰 도움이 되었습니다.
참조 - https://velog.io/@1vl/100mb-넘는-파일이-있는-gitlab-github-미러링
시작은 위의 블로그를 따라 해보았습니다.
설명대로 GIT LFS 를 설치하고, BGF Repo Cleaner 를 설치했습니다.
그리고 아래의 명령어를 통해서 모든 브랜치? 커밋 정보를 포함한 clone을 만듭니다.
git clone --mirror <gitlab 주소>
그리고 그 다음부터는 아래 블로그를 따라해보았습니다.
참조 - https://rexiann.github.io/2020/11/26/mirroring-failed-due-to-large-file.html
클론한 폴더가 있는 위치에 아까 다운받은 jar 파일을 넣어주고 아래 명령어를 실행시켰습니다.
블로그에서는 bfg-1.13.0.jar 이지만 현재 제공되고 있는것은 bfg-1.14.0.jar 이니까 버전만 바꾸어 주었습니다.
java -jar bfg-1.14.0.jar --strip-blobs-bigger-than 100M <git 폴더 이름>
위의 명령어를 실행하니 100MB가 넘는 파일들이 삭제되는 것 처럼 보였습니다.
그리고 해당 git 폴더로 진입하여 아래 명령어를 입력하여 캐시? 같은 찌꺼기 데이터를 삭제 해줍니다. ( https://www.lesstif.com/gitbook/bfg-repo-cleaner-git-repository-129007840.html - 참조 )
git reflog expire --expire=now --all && git gc --prune=now --aggressive
마지막으로 이제 푸시만 해주면 된다고 합니다.
git push
하지만 에러가 발생합니다.

검색을 해보니... 아래와 같은 스택오버플로우 글을 찾을 수 있었습니다.
This article tells you how to make commits with sensitive data unreachable from any branches or tags in your GitHub repository. However, it's important to note that those commits may still be accessible in any clones or forks of your repository, directly via their SHA-1 hashes in cached views on GitHub, and through any pull requests that reference them. You can't do anything about existing clones or forks of your repository, but you can permanently remove all of your repository's cached views and pull requests on GitHub by contacting GitHub Support.
So if you want your Pull Requests, and all the commits/history they reference wiped, so your total repo size on GitHub can shrink (in addition to the size of default clones, which have already shrunk), you need to contact GitHub Support.
대충 번역해서 확인해보니 풀리퀘를 통해서 이리저리 합쳐지고 합친 데이터들의 관계는 민감하고 얽혀있는 정보라서 이를 깔끔하게 지우기 위해서는 github 팀에 문의를 해야한다 라는 것 같았습니다. 그래서 쉽지 않네.. 생각했습니다.
결론
결론적으로 미러링과 비슷한 느낌의 결과를 낼 수 있었습니다.
참조 - https://velog.io/@rungoat/GibLab-저장소-미러링-GitHub 해당 블로그에서 방법을 찾았는데 앞의 과정은 모두 같습니다.
그리고 마지막 부분에서 아래 명령어를 이용해 브랜치 정보, 태그 정보만을 넘기고자 하는 github 브랜치에 직접 push 하는 느낌으로 넘겨줄 수 있었습니다. 즉 mirroring은 아니고 해당 정보들을 푸시 해준 느낌입니다. 그래도 그대로의 정보를 넘길 수 있었다는 것에 만족하는 결과를 얻을 수 있었습니다.
git remote add github <github_repository_url>
git push --all github
git push --tags github