본문 바로가기
Auto Build(CI SCM GIT)/git

git repository 이관 방법 —bare, —mirror

by 아이티.파머 2026. 4. 14.
728x90

가끔 작업을 하다보면 깃 레파지토리를 이관해야 하는경우가 생깁니다. 간단하게 remote 정보를 변경해 주는 방법도 있지만 기존 히스토리 및 TAG, Branch 를 모두 옮겨야 하는경우가 있습니다.
예를 들면 이사할 새집에 새로 시작하기 위해 아무것도 가져가지 않는것과 모든것을 다 이동하는 (이사짐센터를이용) 경우입니다.

이때 --bare, --mirror를 사용하면 됩니다.

 

git 저장소를 이동할때 history 까지 이동하고자 하는경우 사용

bare , mirror

--bare
--mirror

이 두가지 차이점은 refs/*를 가져 오는지 안가져 오는지에 대한 차이가 있다.

하지만 좀더 안전하게 이전하기 위해 —mirror 를 추천한다.

핵심 차이점

  bare mirror
작업디렉토리 없음 (데이터만 존재함) src… 데이터 없음 없음 (데이터만 존재함) src… 데이터 없음
복제대상 기본 브랜치 (main, master, develop…) 모든 브랜치, 태그, 설정 등 전체
원결설정 push 복제 안됨 (추가설정 필요 ) 원격저장소 주소 저장됨

mirror 사용법

# 1. 깃랩에서 미러링 
git clone --mirror {your-gitlab-repository}
cd {your-repo-diractory.git}
# 미러링 하고 나면 src 코드가 없는 형태의 디렉토리들만 **{디렉토.git}** 의 형태로 생성된다.

# 2. remote url을 깃허브로 변겨 
git remote set-url origin {github-repository}

# 3. 깃허브로 푸시 
git push --mirror

# 4. 기존 디렉토리 삭제후 다시 clone
cd..
rm -rf {your-repo-diractory.git}
git clone {github repository}

mirror 예시


# 1. 깃랩에서 미러링
git clone --mirror https://khclab.kakao.local/group/server/mydata/mydata-server.git

total 16
drwxr-xr-x@ 11 yohan.an  staff   352  4 10 09:43 .
drwxr-xr-x  24 yohan.an  staff   768  1 13 10:49 ..
-rw-r--r--@  1 yohan.an  staff  6148  3 10 17:24 .DS_Store
drwxr-xr-x@ 15 yohan.an  staff   480  4  9  2025 .idea
drwxr-xr-x@  4 yohan.an  staff   128  3  4 15:27 github
drwxr-xr-x@ 10 yohan.an  staff   320  4 10 09:43 mydata-server.git
drwxr-xr-x  20 yohan.an  staff   640  2 12 19:31 mydata-ai-agent
drwxr-xr-x@ 29 yohan.an  staff   928  2 11 15:32 mydata-ai-client
drwxr-xr-x@  2 yohan.an  staff    64  4 10 09:41 temp

# 2. 디렉토리 이동
➜  mydata cd mydata-server.git
➜  mydata-server.git git:(main) ls -al
total 40
drwxr-xr-x@ 10 yohan.an  staff   320  4 10 09:43 .
drwxr-xr-x@ 11 yohan.an  staff   352  4 10 09:43 ..
-rw-r--r--@  1 yohan.an  staff    21  4 10 09:43 HEAD
-rw-r--r--@  1 yohan.an  staff   268  4 10 09:43 config
-rw-r--r--@  1 yohan.an  staff    73  4 10 09:43 description
drwxr-xr-x@ 16 yohan.an  staff   512  4 10 09:43 hooks
drwxr-xr-x@  3 yohan.an  staff    96  4 10 09:43 info
drwxr-xr-x@  4 yohan.an  staff   128  4 10 09:43 objects
-rw-r--r--@  1 yohan.an  staff  4842  4 10 09:43 packed-refs
drwxr-xr-x@  4 yohan.an  staff   128  4 10 09:43 refs

# 3. 리모트 URL 깃허브 변경 
➜  mydata-server.git git:(main) git remote set-url origin git@github.com:khc-dt/mydata-api-server.git

# 4. 미러링 수행 (모든 리모트 브렌치 및 테그 이동 
)
➜  mydata-server.git git:(main) git push --mirror
오브젝트 나열하는 중: 33556, 완료.
오브젝트 개수 세는 중: 100% (33556/33556), 완료.
Delta compression using up to 10 threads
오브젝트 압축하는 중: 100% (9865/9865), 완료.
오브젝트 쓰는 중: 100% (33556/33556), 53.98 MiB | 4.44 MiB/s, 완료.
Total 33556 (delta 14628), reused 33556 (delta 14628), pack-reused 0
remote: Resolving deltas: 100% (14628/14628), done.
To github.com:khc-dt/mydata-api-server.git
...생략
 * [new branch]        develop -> develop
 * [new branch]        error-alarm-local-disable -> error-alarm-local-disable
 * [new branch]        feature/1.9.1-transmission-demand-spec -> feature/1.9.1-transmission-demand-spec
 * [new branch]        hotfix/기관명NPL방어 -> hotfix/기관명NPL방어
 * [new branch]        hotfix/탈퇴-버그수정 -> hotfix/탈퇴-버그수정
 * [new branch]        hotfix/탈퇴-비동기처리 -> hotfix/탈퇴-비동기처리
 * [new branch]        main -> main
 * [new branch]        qa/KHCQA-2014 -> qa/KHCQA-2014
 * [new branch]        qa/KHCQA-2034 -> qa/KHCQA-2034
 * [new branch]        release -> release
 * [new reference]     refs/merge-requests/270/head -> refs/merge-requests/270/head
 * [new reference]     refs/merge-requests/270/merge -> refs/merge-requests/270/merge
 * [new reference]     refs/merge-requests/271/head -> refs/merge-requests/271/head
 * [new reference]     refs/merge-requests/272/head -> refs/merge-requests/272/head
 * [new reference]     refs/merge-requests/272/merge -> refs/merge-requests/272/merge
 * [new tag]           Release_KHCQA-3100 -> Release_KHCQA-3100
 * [new tag]           Release_KHCQA-3359 -> Release_KHCQA-3359
 * [new tag]           fixedVersion1.7.0.tag -> fixedVersion1.7.0.tag
 * [new tag]           fixedVersion1.9.1 -> fixedVersion1.9.1
 * [new tag]           pub-sub -> pub-sub
➜  mydata-server.git git:(main)

# 5. 기존 디렉토리 삭제 후 다시 clone
➜  mydata-server.git git:(main) cd ..
➜  mydata rm -rf mydata-server.git
➜  mydata cd github
➜  github git clone git@github.com:khc-dt/mydata-api-server.git
'mydata-api-server'에 복제합니다...
remote: Enumerating objects: 33554, done.
remote: Total 33554 (delta 0), reused 0 (delta 0), pack-reused 33554 (from 1)
오브젝트를 받는 중: 100% (33554/33554), 53.98 MiB | 7.87 MiB/s, 완료.
델타를 알아내는 중: 100% (14626/14626), 완료.
➜  github ls -al
total 16
drwxr-xr-x@  5 yohan.an  staff   160  4 10 09:54 .
drwxr-xr-x@ 10 yohan.an  staff   320  4 10 09:54 ..
-rw-r--r--@  1 yohan.an  staff  6148  3  5 15:58 .DS_Store
drwxr-xr-x@ 33 yohan.an  staff  1056  4 10 09:54 mydata-api-server
drwxr-xr-x@ 31 yohan.an  staff   992  4  9 17:27 mydata-collector

bare

—bare에서 —mirror와 차이점은 push 할때 all, tags를 별도로 해주어야 한다.

# 1. GitLab에서 bare clone
git clone --bare https://gitlab.com/username/your-repo.git
cd your-repo.git

# 2. remote URL을 GitHub로 변경
git remote set-url origin https://github.com/username/new-repo.git

# 3. GitHub로 push
git push --all    # 브랜치 전부
git push --tags   # 태그 전부

# 4. 정리 후 다시 clone
cd ..
rm -rf your-repo.git
git clone https://github.com/username/new-repo.git