작업 tools/git

git 저장소: 복제하기, 합치기, 변경하기

yztech 2021. 9. 26. 08:14
반응형

로컬 저장소 복제하기

git 을 통해 작업하다가 보면, 원격 저장소를 간단하기 관리 하기 위해, 모든 브랜치들의 작업 내역들을 원격 저장소에 저장하지 않고 로컬 저장소에만 저장해서 진행하는 경우가 많습니다.

어떠한 사유로 인해, 로컬 저장소를 내용을 현재까지로 유지한 채, 다른 폴더에서 새롭게 다시 시작하고자 하는 경우에는 원격 저장소에 저장하지 않은 로컬 저장소의 작업 내역까지 복제해야 합니다.

이 경우, 모든 작업내역까지 포함해 복제하는 방법은 새롭게 시작할 원격 저장소를 만들고, mirror 옵션을 사용해 push할 수 있습니다.

git remote set-url --push origin <새로운 원격 저장소 이름>
git remote -v
git push --mirror <신규 원격 저장소 이름>

아래 예에서 https://github.com/testgit/testrepo-all.git 저장소는 미리 만들어두어야 합니다.

git remote set-url --push origin https://github.com/testgit/testrepo-all.git
git remote -v
git push --mirror https://github.com/testgit/testrepo-all.git

원격 저장소 합치기

아래와 같이 원격 저장소 A.git에서 작업하다가,
다른 장소에서 작업하기 위해 clone 후, 다른 원격 저장소 B.git에 push한 경우,
B.git의 브랜치 및 작업 이력을 다시 원격 저장소 A.git에 합쳐야 할 때가 있습니다.

한 가지 쉬운 방법은 현재 작업중인 로컬 저장소 B의 내용을 모두 원격 저장소에 B.git에 push한 후,
로컬 저장소 B의 내용을 원격 저장소 A에 push하면 됩니다.

우선 원격 저장소에 A.git을 origin으로 추가하고,
현재 로컬 저장소 B 의 브랜치(master)를 원격 저장소 A.git의 origin/master에 push합니다.

git remote set-url --add origin A.git
git remote -v
git push origin master

로컬 저장소 A에서,
원격 저장소 A.git의 내용을 갱신하고
원격 저장소에서 origin/master 브랜치를 pull합니다.

서브모듈 원격 저장소 변경하기

git submodule의 원격 저장소를 변경하는 간단한 방법은 .gitmodule을 수정한 후, resync와 update를 수행하면 됩니다.

vi .gitmodules
git submodule sync
git submodule update --init

git 2.25 (2020 Q1) 버전에서는 다음과 같이 set-url을 사용할 수 도 있지만, 이는 위에서 .gitmodules을 수정하는 것과 동일합니다.

git submodule set-url <submdoule path>  <submodule remote url>
반응형