[Git] 하나의 폴더에서 두 개의 리모트 운영하기

2 min readJeongwoo Ahn

2023년 1월 12일에 작성한 이전 블로그 글을 옮겨왔습니다.

흔한 상황은 아니지만, 가끔 하나의 로컬 소스코드로 두 개의 원격 저장소를 운영해야 할 때가 있습니다. 저도 이런 상황을 마주했을 때 꽤 헤맸던 기억이 나서, 그때 정리해둔 내용을 공유해봅니다.

단순히 두 원격지를 등록하고 운영하면 될 것 같았는데, 서로 히스토리가 다르면 예상치 못한 문제들이 생기더라고요.

이미지

🪞 미러 저장소 만들기

가장 먼저 해야 할 일은 origin 저장소를 히스토리까지 통째로 복사하는 것입니다. Git에는 미러 저장소를 만드는 기능이 있는데, 이걸 활용하면 모든 브랜치와 커밋 이력을 새 원격지로 옮길 수 있어요.

예를 들어 이런 상황이라고 가정해볼게요.

  • origin 원격지: https://github.com/your-name/my-origin.git
  • copy 원격지: https://github.com/your-name/my-copy.git (새로 만든 빈 저장소)

먼저 로컬에 미러를 만듭니다. --mirror 옵션이 핵심이에요.

$ git clone --mirror https://github.com/your-name/my-origin.git

그다음 새 원격지로 푸시합니다.

$ cd my-origin.git  # .git이 붙는다는 점 주의하세요!
$ git remote set-url --push origin https://github.com/your-name/my-copy
$ git push --mirror

이렇게 하면 origin의 모든 것이 copy로 복사됩니다.

🔀 두 리모트 사이에서 작업하기

이제 copy 저장소에서 작업하다가 origin으로 옮기는 흐름을 살펴볼게요. 처음에 이 부분이 좀 헷갈렸는데, 리모트 이름을 명확하게 정리해두니까 훨씬 수월해졌습니다.

# copy 저장소를 클론
$ git clone https://github.com/your-name/my-copy.git

# 기본 리모트 설정을 정리하고 새로 등록
$ git remote rm origin
$ git remote add copy https://github.com/your-name/my-copy.git
$ git remote add origin https://github.com/your-name/my-origin.git

# 잘 설정됐는지 확인
$ git remote -v
copy   https://github.com/your-name/my-copy.git
origin https://github.com/your-name/my-origin.git

이제 feature 브랜치를 만들어서 작업해봅시다.

$ git remote update  # 원격 브랜치 최신 상태 가져오기
$ git switch main
$ git checkout -b feature

# ... 코딩 ...

$ git commit -m "✨ my feature"
$ git push copy feature    # copy에 먼저 푸시
$ git push origin feature  # origin에도 푸시

앞으로 이 브랜치에서 origin을 기본 리모트로 쓰고 싶다면 -u 옵션을 활용하면 됩니다.

$ git push -u origin feature

🎯 추적 브랜치 설정하기

feature 브랜치가 origin/feature를 추적하는지, copy/feature를 추적하는지 명확하게 해두면 작업이 훨씬 편해집니다. 저는 이 부분을 나중에 알게 돼서 처음엔 좀 헤맸어요.

# 추적 브랜치 추가
$ git remote set-branches --add origin feature

# 설정 확인
$ cat .git/config
[remote "origin"]
  url = <repo_url>
  fetch = +refs/heads/*:refs/remotes/origin/*
  fetch = +refs/heads/feature:refs/remotes/origin/feature

추적 브랜치를 변경하는 것도 간단합니다.

$ git branch -u origin/feature

# 현재 추적 중인 브랜치 확인
$ git branch -vv
feature b37bc773 [origin/feature] "✨ my feature"

이렇게 설정해두면 상황에 따라 추적 브랜치를 바꿔가며 유연하게 작업할 수 있습니다. 자주 쓰는 패턴은 아니지만, 알아두면 언젠가 유용하게 쓸 날이 올 거예요.