Git in git (git subtree)

Git subtree는 프로젝트 내 여러 모듈을 분리 개발할 수 있도록 도와주는 도구이다.

프로젝트가 서버와 클라이언트로 구성되어 있고 각각 개별 git에 관리 되고 있다고 했을 때, 두개의 git을 하나의 통합 git으로 관리 할 수 있다.

즉, 통합된 Main git을 구성한다 하였을 때 root directory(git) 밑에 subtree(git)를 두 개 두는 것이다.

사용법

  1. Main git으로 이동 후 subtree로 추가할 git을 remote repository에 등록한다.
$ cd ${project-dir}
$ git remote add ${remote-alias} ${remote-url}

ex)
$ git remote add server-repo https://github.com/bitboom/server.git
$ git remote add client-repo https://github.com/bitboom/client.git

./project (.git)
  1. Subtree 추가
$ git subtree add --prefix=${subtree-dirname} ${remote-alias} ${remote-branch}

ex)
$ git subtree add --prefix=server server-repo master
$ git subtree add --prefix=client client-repo master

./project (.git)
|- server (subtree)
|- client (subtree)
  1. main git branch에 subtree branch를 연결
$ git checkout --track ${remote-alias}/${remote-branch} -b ${local branch}

ex)
$ git checkout --track server-repo/master -b server
$ git checkout --track client-repo/master -b cliet
  1. 이제 server.git과 cliet.git의 commit들은 main.git에 통합 되었고 push와 pull은 main git에 반영됨

  2. 개별 subtree에 작업 방법

$ git subtree push --prefix=${subtree-dir} ${remote-alias} ${remote-branch}
$ git subtree pull --prefix=${subtree-dir} ${remote-alias} ${remote-branch}

ex)
$ git subtree push --prefix=server server-repo master
$ git subtree pull --prefix=client client-repo master