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'Auto Build(CI SCM GIT) > git' 카테고리의 다른 글
| git 명령어 (0) | 2018.11.26 |
|---|---|
| Git 빈폴더 추가 관리 하기 (git empty folder add) (0) | 2018.11.01 |
| Git 기본 명령어 / Git tag, Merge (4) | 2016.07.21 |
| use github 소셜 프로그래밍? (0) | 2012.07.19 |