상세 컨텐츠

본문 제목

Git submodule 사용하는 방법 및 sync 방법 (git 의 하위 git 사용)

IT : GIT

by 인포개더러 2015. 2. 26. 04:10

본문

Git submodule 사용하는 방법 및 sync 방법 (git 의 하위 git 사용)


Git 을 사용하는데 git 하위 폴더에 git 을 하나더 사용할 일이 생길 경우 사용하는 방법이 submoudle 입니다. 보통 submodule 로 들어가는 git 은 lib 형태로 배포되는 소스일 경우가 많습니다.


submodule 을 사용하게 되면 함께 사용되는 두개의 프로젝트를 독립적으로 운영할 수 있다는 장점이 생깁니다. 하지만 git 운영이 복잡해지고 사용자의 실수를 유발할 확률이 높아지므로 개인적으로는 대규모 프로젝트에서는 사용하지 않는 것이 좋을 것 같다는 생각이 드네요.



일단 git submoudle 을 만드는 방법에 대해 알아보겠습니다.


이미 생성되어 있는 git 에서 아래 명령을 실행합니다.


$ git submoudle add ssh://192.0.0.1/testDir/sub.git subdir

Initialized empty Git repository in /opt/subtest/subdir/.git/

remote: Counting objects: 3181, done.

remote: Compressing objects: 100% (1534/1534), done.

remote: Total 3181 (delta 1951), reused 2623 (delta 1603)

Receiving objects: 100% (3181/3181), 675.42 KiB | 422 KiB/s, done.

Resolving deltas: 100% (1951/1951), done.


이렇게 하면 현재 git 폴더 아래에 subdir 이라는 폴더가 생기고 그 안에 .git 폴더가 생성됩니다.

현재 git 에서 git status 를 실행하면 new  file 이 두개 생성되어 있습니다.


new  file: .gitmodules

new  file: subdir


.gitmodules 파일은 어떤 git module 이 사용되고 있는지에 대한 정보를 저장하는 파일이고 subdir 은 위에서 지정한 submoudle 폴더 입니다.


subdir 폴더는 일반적인 폴더가 아닌 submodule 로 취급되어 그 안에서 일어난 어떤 파일이나 git commit의 변화도 하나의 변화로 취급하여 git diff 를 사용하여 비교해 보아도 하나의 commit 으로 나타납니다.



submodule 의 update 방법


$ git submodule init

$ git submodule update


위의 두 명령으로 submoudle 이 update 됩니다.

누군가 submodule 을 수정하고 난 후에는 git pull 이나 repo sync 후 항상 $ git submodule update 명령으로 submodule 을 update 해주어야 합니다. 그렇지 않으면 git은 sync 가 된 상황인데도 git status 명령에 변화가 있는 상태로 표시됩니다.


그럼 submodule 을 실제 사용하는 방법에 대해 알아 보겠습니다.

만들어진 subdir 아래에서 몇개의 commit 변화가 발생하였을 경우 다른 곳에서 submodule 을 포함한 git에 git clone / repo sync 를 하고나면 현재 git 은 깨끗한 상태가 아닌 것으로 표시 됩니다.


$ git diff

diff --git a/subdir b/subdir

index 6c5e70b..08d709f 160000

--- a/subdir

+++ b/subdir

@@ -1 +1 @@

-Subproject commit 6c5e70b984a60b3cecd395edd5b48a7575bf58e0

+Subproject commit 08d709f78b8c5b0fbeb7821e37fa53e69afcf433


이럴 때 현재 git 에서는 해당 사항을 commit 하여 현재 git 에 push 하여 주어야 합니다.

그러고 나면 git log에 subdir 에 대한 변경 사항이 update 되어 이후 다른 곳에서 sync 를 하여도 동일한 내용을 볼 수 있게 됩니다.


다른 사람이 submodule 을 변경한 것을 안다면 해당 사항을 merge 하여 push 하여도 됩니다.


이상 Git submodule 사용하는 방법 및 sync 방법 (git 의 하위 git 사용)에 대한 글 이였습니다.

관련글 더보기