Seongho's Dev Story

Seongho's Dev Story

이성호의 개발 이야기

Git Subtree 사용법 - 하나의 저장소에서 여러 저장소를 관리하기

Git에서 저장소를 관리하다 보면, 상위 저장소에서 다른 저장소를 Clone하게 되는 경우가 있습니다. 그 경우 상위 저장소에서 하위 저장소를 Push하면 다른 저장소들은 빈 폴더로 Push가 됩니다. 해당 문제를 해결하기 적합한 것이 Subtree라는 것입니다. 한번 공부해봅시다.

Subtree의 기능

상위 저장소에서 하위 저장소를 가질 수 있으며, 마치 하나의 저장소처럼 관리하도록 도와주는 기능입니다.

장점

단점

Subtree 생성하기

상위 프로젝트를 Parent, 하위 프로젝트를 Child라고 가정하여 설명하겠습니다.

1. 상위 저장소로 이동

모든 작업은 상위 저장소의 Root 경로에서 이루어집니다. Console에서 상위 저장소로 가줍시다.

git clone Parent.git
cd Parent

2. 원격 참조 추가

Subtree에서 Add, Push, Pull, …을 할 때 어느 저장소에서 이루어지는지 참조를 추가해야 합니다.

# git remote add { Remote name } { Child repo }
git remote add remote-child Child.git

Remote name은 원하시는 대로 정하시면 됩니다. 참조 시에 사용될 이름입니다. 해당 글에선 remote-child라는 이름을 사용하겠습니다.

잘 추가됐는지 확인하고 싶다면 아래의 명령어를 입력해보시면 됩니다.

git remote -v

3. Subtree 추가

드디어 Subtree 명령어를 사용합니다.

# git subtree add --prefix { Child path } { Remote name } { Child branch }
git subtree add --prefix childs/project remote-child master

Subtree 관리(Push, Pull)

Subtree의 Child 관리에는 두 가지가 있습니다.

Parent 저장소에서 Child를 관리하기

평소에 Push하던 과정을 진행하시면 됩니다.

git add { Child path }
git commit -m { Commit message }
git push origin { branch }

이렇게 git push만 하는 경우에는 오로지 Parent 저장소에만 Child의 변경 사항이 반영됩니다.

Child의 저장소를 직접 관리하기

Parent에서 Child 변경 사항을 Child 저장소에도 반영하기 위해선 이 기능을 사용해야 합니다. Parent 저장소에서 Child 폴더까지 Push를 완료했다는 전제하에 가능합니다.

# push
git subtree push --prefix { Child path } { Remote name } { Child branch }

# pull
git subtree pull --prefix { Child path } { Remote name } { Child branch }

Comments