[git] 하나의 프로젝트에서 여러 git 저장소 사용하기
![[git] 하나의 프로젝트에서 여러 git 저장소 사용하기](/content/images/size/w1920/2024/12/GIT.png)
Git 다중 리모트를 사용하여 Gitea와 GitHub 연동하기
본인은 사내에서 gitea를 사용하고 있고 개인적으로 github랑 개인 NAS에 gitea를 사용하고 있다.
사내에서 작업한 프로젝트를 내 개인 리포지토리에 저장해서 집, 카페, 외부 어디서든 프로젝트를 동시에 관리하려면, Git의 다중 리모트(remote) 기능을 사용하면 된다. 다중 리모트를 설정하면, 동일한 로컬 저장소에서 두 개 이상의 원격 저장소로 데이터를 주고받을 수 있게 된다.
해당 포스트에서는 대표적으로 gitea와 gitub 2개의 연동에 대하여 다룬다.
여기서 진행할 순서는 다음과 같다:
- Gitea와 GitHub 레포지토리 리모트 설정.
- 각 리모트를 구분하여 push/pull하는 방법.
- 다중 리모트 관리 시 주의사항.
1. 사전 준비: 프로젝트 리포지토리 설정
- 현재 Gitea의 레포지토리 (
wbapp
)는 master 브랜치로 연결되어 있다.- Gitea의 URL 예시:
http://gitea-ip/your-username/app.git
- Gitea의 URL 예시:
- GitHub에도 동일한 프로젝트(
wbapp
)를 만들고, 이를main
브랜치로 관리하려고 한다.- GitHub의 URL 예시:
https://github.com/nyaongdev/app.git
- GitHub의 URL 예시:
먼저 GitHub에 새로운 레포지토리를 생성하고, 여기에 다중 리모트를 설정하도록 하자.
2. 다중 리모트 설정하기
2.1 기존 리모트 상태 확인
로컬 저장소에서 리모트 설정을 확인하려면 터미널이나 명령 프롬프트에서 다음 명령어를 사용한다.
git remote -v
이 명령어를 입력하면 현재 연결된 리모트 목록이 나타난다. 예를 들어:
origin <http://gitea-ip/your-username/app.git> (fetch)
origin <http://gitea-ip/your-username/app.git> (push)
현재 origin
이라는 이름으로 Gitea 리모트가 연결된 상태다.
2.2 GitHub 리모트 추가하기
이제 GitHub 리모트를 추가해야 한다. GitHub 리모트를 추가할 때는 리모트의 이름을 다르게 설정하여, 두 개의 리모트를 구분할 수 있도록 해야 한다. 여기서는 **github-nyaong
**이라는 이름으로 GitHub 리모트를 추가할 것이다.
git remote add github-nyaong <https://github.com/nyaongdev/app.git>
이제 git remote -v
명령어를 다시 실행하면 다음과 같은 출력이 나올 것이다.
origin <http://gitea-ip/your-username/app.git> (fetch)
origin <http://gitea-ip/your-username/app.git> (push)
github-nyaong <https://github.com/nyaongdev/app.git> (fetch)
github-nyaong <https://github.com/nyaongdev/app.git> (push)
이제 origin
은 Gitea, github-nyaong
은 GitHub를 가리키고 있다.
3. 리모트를 구분하여 Push/Pull 사용하기
이제 각각의 리모트로 push와 pull 작업을 할 수 있는 방법을 살펴보자.
3.1 Gitea와 GitHub에 Push
*GitHub (github-nyaong)**에 push:
git push github-nyaong main
*Gitea (origin)**에 push:
git push origin master
각 리모트를 지정해 브랜치를 푸시(push)할 수 있다. 여기서는 Gitea에는 master
브랜치로, GitHub에는 main
브랜치로 푸시하는 방식이다.
3.2 각각의 리모트에서 Pull
*GitHub (github-nyaong)**에서 pull:
git pull github-nyaong main
*Gitea (origin)**에서 pull:
git pull origin master
이를 통해 각각의 원격 저장소에서 변경 사항을 로컬 저장소로 가져올 수 있다.
3.3 두 리모트에 동시에 Push하기
Gitea와 GitHub 두 리모트에 동시에 변경 사항을 push하고 싶다면, 두 리모트를 한 번에 지정하여 푸시할 수도 있다.
git push origin master
git push github-nyaong main
이렇게 명령어를 두 번 실행하여 두 곳에 동시에 변경 사항을 적용할 수 있다. 더 자동화하고 싶다면, Git **훅(hook)**이나 스크립트를 작성해 한 번의 명령어로 여러 리모트로 푸시하도록 만들 수 있다.
4. 다중 리모트 사용 시 주의사항
4.1 브랜치 관리
- Gitea에서는
master
브랜치를 사용하고, GitHub에서는main
브랜치를 사용하는 상황이므로, 브랜치 간의 동기화가 중요하다. 이를 위해 로컬에서 적절히checkout
하고 변경 사항을 푸시해야 한다. - 예를 들어,
master
브랜치에서 작업한 후main
브랜치에도 동일하게 반영하려면, 브랜치 병합(merge
)을 하거나 리베이스(rebase
)를 사용해야 할 수 있다.
# master 브랜치에서 작업 후 main 브랜치로 병합
git checkout main
git merge master
git push github-nyaong main
이와 같이, 각 브랜치가 서로 다르게 유지되지 않도록 주기적으로 병합하여 두 리모트의 코드가 일관되도록 관리하는 것이 좋다.
4.2 충돌 관리
- 같은 프로젝트를 여러 리모트에 동기화하다 보면, 가끔 **충돌(conflict)**이 발생할 수 있다. 이 경우, Git은 충돌을 해결해야 푸시할 수 있도록 하며, 이를 해결한 후에 다시 푸시하면 된다.
- 만약 Gitea와 GitHub 양쪽에서 모두 병렬적으로 작업하고 있다면, 주기적으로 pull을 통해 양쪽의 변경 사항을 확인하고 반영해야 한다.
4.3 협업 시 고려사항
- 만약 팀원들과 Gitea를 통해 협업하고, 개인적으로 GitHub에도 저장하고 싶다면, Gitea에서 작업한 후 GitHub에 백업하는 형식으로 생각하면 된다.
- 모든 작업이 Gitea를 기준으로 이루어지고, 완료된 작업을 GitHub에 푸시하는 순서를 정하면 충돌을 줄이고 관리하기 쉽다.
5. 마무리
이제 하나의 프로젝트에서 Gitea와 GitHub 두 리모트를 동시에 관리할 수 있게 되었다. 다중 리모트를 사용하면 하나의 로컬 저장소에서 여러 원격 저장소로 쉽게 데이터를 동기화할 수 있어, 사내의 Git 서버와 외부의 GitHub를 동시에 사용하는 것이 가능해진다.
- Gitea는 사내 협업을 위한 주요 원격 저장소로 사용하는 형태
- GitHub는 개인 백업이나 외부 프로젝트 관리용으로 사용하는 형태
댓글