업데이트:

카테고리:

/

태그: ,

Git Repo mirroring 하기

  1. 옮길려는 git 저장소 clone 하기
    git clone --mirror [옮길려는 repo url]
    
  2. git 폴더 안으로 이동하기
    cd [저장소 이름].git
    
  3. 옮길 저장소 push 하기
    git push --mirror [옮길 저장소 repo url]
    

pre-receive hook declined 에러 발생시

git repo settings에 들어가서 protected branch 옵션을 unProtect 로 바꾼다

파일크기가 너무 큰 경우

git mirror는 최대 100MB 까지의 파일 밖에 옮기지 못한다.
크기가 큰 파일은 git lfs를 통해서 파일을 옮긴다.

git lfs install
git lfs track [파일경로 or 파일이름]
git commit -m 'Commit lfs file'
git push --mirror [옮길 저장소 repo url]

파일 업로드 커밋까지 들어간 경우

bfg-repo-cleaner를 참고하였다.

  1. bfg.jar를 다운받는다.
    $ curl -o bfg.jar -L https://repo1.maven.org/maven2/com/madgag/bfg/1.14.0/bfg-1.14.0.jar
    
  2. bfg로 정리할 저장소를 –mirror 옵션을 붙여서 clone 한다.
    $ git clone --mirror git@github.com:lesstif/my-repos.git
    
  3. 커밋 이력에서 크기가 100MB 이상인 파일을 삭제한다.
    $ java -jar bfg.jar --strip-blobs-bigger-than 100M my-repos.git
    
  4. 정리가 끝나면 저장소로 이동해서 local의 데이터를 업데이트 시킨다.
    $ cd my-repos.git
    $ git reflog expire --expire=now --all 
    $ git gc --prune=now --aggressive
    
  5. 완료되었으면 원격저장소에 반영한다.
    $ git push
    

deny updating a hidden ref 에러 발생

해당 에러가 발생하여 찾아보니 git clone --mirror 가 아니라 git clone --bare로 하면 정상적으로 mirror 되는 것을 알아볼 수 있다.