git submodule 이란(가져오기, 삭제, update, add, init, clone 등 사용법)

작성일 :

Git Submodule 이란?

Git 서브모듈(Submodule)은 하나의 Git 저장소 내에서 다른 Git 저장소를 포함해야 할 때 사용됩니다. 이는 특히 대형 프로젝트나 여러 리포지토리를 하나의 리포지토리에 통합하여 관리해야 할 때 유용합니다. 예를 들어, 여러 팀이 각각 개발한 라이브러리를 하나의 프로젝트로 합칠 때 서브모듈을 사용하면 효율적입니다.

서브모듈 추가 (add)

새 서브모듈을 추가하려면 다음 명령어를 사용합니다.

shell
$ git submodule add <repository_url> <path>

예시:

shell
$ git submodule add https://github.com/example/library.git lib/library

위 명령어는 https://github.com/example/library.git 리포지토리를 현재 Git 저장소의 lib/library 경로에 서브모듈로 추가합니다.

서브모듈 초기화 (init)

서브모듈을 처음 추가한 후에는 초기화가 필요합니다. 초기화를 통해 서브모듈의 Git 설정을 작성합니다.

shell
$ git submodule init

위 명령어는 .git/config 파일에 서브모듈 정보를 등록합니다.

서브모듈 업데이트 (update)

서브모듈을 초기화한 이후에는 각 서브모듈을 최신 상태로 업데이트할 수 있습니다.

shell
$ git submodule update

이 명령어는 서브모듈 디렉터리를 최신 커밋으로 체크아웃합니다.

서브모듈 복제 (clone)

서브모듈이 포함된 리포지토리를 클론할 때는 --recursive 옵션을 사용하여 서브모듈을 함께 클론할 수 있습니다.

shell
$ git clone --recursive <repository_url>

기존 리포지토리를 클론한 후에 서브모듈을 초기화하고 업데이트하려면 다음 명령어를 사용합니다.

shell
$ git submodule init
$ git submodule update

서브모듈 제거 (delete)

서브모듈을 삭제하려면 다음 단계를 따릅니다.

  1. 서브모듈 디렉터리를 제거합니다.
shell
$ rm -rf <path_to_submodule>
  1. .gitmodules 파일에서 서브모듈 항목을 제거합니다.

  2. .git/config 파일에서 서브모듈 관련 섹션을 제거합니다.

  3. 서브모듈 캐시를 제거합니다.

shell
$ git rm --cached <path_to_submodule>

서브모듈 이용 시 주의사항

Git 서브모듈을 사용할 때는 몇 가지 주의사항이 있습니다. 우선 서브모듈은 상위 저장소와 독립적으로 버전 관리를 진행합니다. 이로 인해 서브모듈을 업데이트할 때마다 서브모듈 디렉토리 안으로 들어가서 별도의 커밋이나 푸시 작업을 해야 하는 경우가 많습니다. 또한, 서브모듈의 변경 사항을 상위 저장소에 반영할 때는 서브모듈의 최신 커밋을 서브모듈 경로에서 git add하고 상위 저장소에서 커밋하여 반영해야 합니다.

다음은 서브모듈의 변경 사항을 상위 저장소에 반영하는 예시입니다.

shell
$ cd <path_to_submodule>
$ git add .
$ git commit -m "Update submodule"
$ cd ..
$ git add <path_to_submodule>
$ git commit -m "Update submodule reference"
$ git push

이와 같은 절차는 번거로울 수 있지만, 서브모듈을 사용하면 여러 프로젝트를 효과적으로 관리할 수 있습니다.

서브모듈을 통한 협업

서브모듈을 사용하면 팀원 간의 협업이 더욱 원활해집니다. 각 팀원이 서브모듈을 개별적으로 관리할 수 있으며, 특정 버전의 종속성을 고정하여 코드의 일관성을 유지할 수 있습니다. 이는 버전 충돌 문제를 최소화하고 코드의 안정성을 높이는 데 기여합니다.

또한, 서브모듈을 사용하면 오픈 소스 프로젝트나 외부 라이브러리를 쉽게 포함하고 업데이트할 수 있습니다. 예를 들어, 자주 업데이트되는 오픈 소스 라이브러리를 서브모듈로 추가하고 필요에 따라 최신 버전으로 업데이트하면 됩니다.

shell
$ cd <path_to_submodule>
$ git fetch
$ git checkout <new_commit_hash>
$ cd ..
$ git add <path_to_submodule>
$ git commit -m "Update submodule"
$ git push

이렇게 하면 서브모듈의 최신 커밋을 상위 저장소에 반영할 수 있습니다.

결론

Git 서브모듈은 대규모 프로젝트 관리나 여러 프로젝트 간의 의존성을 관리하는 데 매우 유용한 도구입니다. 서브모듈을 추가하고 초기화하며 업데이트하고 복제하는 기본적인 방법부터, 서브모듈을 삭제하는 방법까지 다양한 내용을 다뤘습니다. 이를 통해 Git 서브모듈을 활용하여 효율적이고 체계적인 버전 관리가 가능해집니다.