Git 서브모듈(submodule) 추가 및 삭제 방법

프로젝트는 하다 보면 외부 모듈이 필요한 경우가 있다. 그럴 때 사용하는 서브 모듈 사용법에 대해서 알아 보겠다.

개요

외부 모듈을 참조하려면 git submodule 명령을 이용해서 외부 모듈을 추가(clone)할 수 있다. git submodule 명령은 git clone과 달리 같은 작업 디렉터리(Working Directory)에 여러 모듈을 추가할 수 있는 장점이 있다.

여기에서는 명령어 예제로 Hugo의 테마인 book을 서브모듈로 추가 했다가 삭제해 보도록 하겠다.

Git Submodule 추가 방법

git submodule add 명령으로 외부 모듈을 현재 작업 디렉터리에 추가(clone)할 수 있다.

git submodule add {Git Repository URL} {Submodule Project directory}
% git submodule add https://github.com/alex-shpak/hugo-book.git themes/book
Cloning into '/Users/user/develop/devkuma-hugo-blog/themes/book'...
remote: Enumerating objects: 4124, done.
remote: Counting objects: 100% (6/6), done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 4124 (delta 2), reused 2 (delta 1), pack-reused 4118
Receiving objects: 100% (4124/4124), 6.63 MiB | 5.50 MiB/s, done.
Resolving deltas: 100% (2122/2122), done.

git status 명령으로 추가된 내용을 확인 할 수 있다.

% git status
On branch main
Your branch is up to date with 'origin/main'.

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	modified:   .gitmodules
	new file:   themes/book

... 이하 생략 ...

이 수정된 내용을 git commit 명령으로 커밋하면 된다.

git commit -m "{commit message}

git submodule 추가된 모듈 확인

submodule이 추가되었다면 git submodule status 명령으로 추가된 모듈 목록을 볼 수 있다.

% git submodule status
 036e037a63ba06ca366adb1a0c3a005d1a0b15b8 themes/book (v9-54-g036e037)

Git Submodule 삭제 방법

먼저 git submodule deinit 명령으로 해당 submodule을 제거한다.

git submodule deinit -f {Submodule Project directory}
% git submodule deinit -f themes/book
Cleared directory 'themes/book'
Submodule 'themes/book' (https://github.com/alex-shpak/hugo-book) unregistered for path 'themes/book'

다음으로는 rm 명령으로 .git/modules 해당 디렉터리를 삭제한다.

rm -rf .git/modules/{Submodule Project directory}
% rm -rf .git/modules/themes/book

그리고 git에서 해당 디렉터리를 제거해 준다.

git rm -f {Submodule Project directory}
 % git rm -f themes/book
rm 'themes/book'

마지막으로 git commit을 하면 외부 모듈을 삭제하여 커밋한다.

git commit -m "{commit message}
% git commit -m "rm themes/book"
[main f9aaff69] rm themes/book
 2 files changed, 4 deletions(-)
 delete mode 160000 themes/book

참고




최종 수정 : 2023-04-09