728x90
깃 미러링: Git repository mirroring
- Git 원격 저장소를 다른 Git 원격 저장소로 커밋 로그를 포함해 온전히 옮길 때 사용한다.
- Github, Gitlab, Bit bucket 등 Git 기반 원격 저장소 간 모두 가능하다.
(*편의상 원본 저장소를 A, 복사 저장소를 B로 지칭한다.)
1. 원본 저장소(A)의 데이터를 mirror 옵션을 사용해 로컬로 Clone
$ git clone --mirror [원본 저장소(A) 주소]
// git mirroring, 원본 저장소(A)의 데이터를 클론한다.
2. Clone 한 로컬 저장소에서 mirror 옵션을 사용해 복사할 원격 저장소(B)로 Push
$ git remote set-url --push origin [이동할 원격 저장소(B) 주소]
$ git push --mirror
// 클론한 로컬 저장소(A) 디렉토리에서 실행한다.
Error: Large file issue, Git 파일 크기 제한 에러가 발생했을 경우
remote: error: GH001: Large files detected. You may want to try Git Large File Storage - https://git-lfs.github.com.
remote: error: Trace: e3688f9d27edc7d94098eca76412391d
remote: error: See http://git.io/iEPt8g for more information.
remote: error: File static/images.zip is 436.46 MB; this exceeds GitHub's file size limit of 100.00 MB
! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'https://oizys18@github.com/sth/sthsth.git'
- github의 파일 사이즈 제한은 100mb다. 100mb보다 더 큰 파일을 push 하려고 하면 해당 에러가 발생할 수 있다.
- 이 에러는 HEAD (최신)에 해당 파일이 없더라도 commit 이력에 존재하면 발생할 수 있다.
- 과거 머신러닝 시 사용했던 샘플데이터들을 별 생각없이 push 하고 clone 하다가 자주 본 메시지들이다.
A) 파일이 더 이상 필요없을 경우, 해당 커밋 이력을 삭제하고 push 한다.
1. git-filter-branch를 사용해 파일을 삭제한다.
$ git filter-branch -f --index-filter "git rm --cached --ignore-unmatch static/sample-data.zip" -- --all
2. 기존 commit id를 삭제한다.
$ rm -rf .git/refs/original/
3. commit id를 재설정, 저장소를 garbage colletcor로 청소한다.
$ git reflog expire --expire=now --all
$ git gc --prune=now --aggressive
4. 용량이 낮아진 저장소를 push 한다.
혹은, BFG Repo-Cleaner를 사용한다.
1. BFG Repo-Cleaner에서 bfq-x.x.x.jar 파일을 로컬 저장소 위치에다운 받는다.
2. java 명령어를 통해 100mb보다 큰 파일을 정리한다.
$ java -jar bfg-x.x.x.jar --strip-blobs-bigger-than 100M
(...)
Deleted files
— — — — — — -
Filename Git id
— — — — — — — — — — — — — —
sample-data.zip | b442f23b (120.9 MB)
(...)
3. 용량이 낮아진 저장소를 push 한다.
B) Git LFS
에러 메시지에서 안내되었듯이, 해당 기능을 사용하면 용량이 큰 커밋을 작게 조각내어 문제없이 push 할 수 있다.
1. Git Large File Storage를 로컬에 설치
$ git lfs install
2. git-lfs가 용량이 큰 자료를 track 하도록 설정 후 commit
$ git lfs track “sample-data.zip”
Tracking *sample-data.zip
$ git commit -m “Commit Large data file”
[master (root-commit) be2b425] Commit Large data file
(...)
ETC
- git push --mirror는 로컬 브랜치 + 원격 브랜치까지 push 한다. 따라서 처음 clone 후 한 번만 사용하고, 이후부터는 일반 push만 하는 것이 권장된다.
참고자료
728x90
'GIT' 카테고리의 다른 글
GIT Error - Git can't detect local changes, can't add (0) | 2021.06.13 |
---|---|
GIT Error - can't find remote repository (0) | 2021.06.13 |
Git 계정정보 초기화(git config clear), credential error 원인 및 해결방법 (0) | 2021.06.13 |
remote: HTTP Basic: Access denied (0) | 2021.06.13 |
error: RPC failed; curl transfer closed with outstanding read data remaining (0) | 2021.06.04 |
댓글