Git submodule 일괄등록하기

배경

Git submodule은 유용하지만, 다루기 쉽지 않다. Git submodule 사용에 대한 전반적인 내용은 Git submodule 사용하기를 참고하자.

여기서는 많은 수의 submodule을 등록해야 하는 경우를 설명해 보자. 기본적으로 submodule은 최초에 git submodule add <url> <path>을 통해 하나하나 등록해야 한다. 하지만 등록해야 하는 submodule이 많다면 어떻게 해야 할까. .gitmodules file을 이용하여 일괄 등록할 수 있을 것 같지만, git에서 공식적으로 제공하고 있는 방법은 없다. 따라서 개인적으로 스크립트를 만드는 등의 방법으로 처리해야 한다.

방법 (권장)

먼저 .gitmodules과 같은 문법으로 MY_GITMODULES 파일을 만든다. 참고로 이 파일은 ini 형식이다. MY_GITMODULES의 이름을 .gitmodules로 하면, 예전내용에서 나타나는 문제가 똑같이 발생한다. 따라서 다른 이름으로 하자.

그리고 아래의 python 스크립트 add_gitmodules.py을 받아 아래와 같이 실행하자.

add_gitmodules.py MY_GITMODULES

python 스크립트의 내용과 MY_GITMODULES의 예시는 아래와 같다.


아래 내용은 예전에 적었던 내용인데, 기록을 남기는 목적으로 남겨둔다. 이렇게 하면 git submodule add를 실행할 때 .gitmodules에 데이터가 추가되어 결과적으로 중복 데이터가 생기는 문제가 발생한다. 위의 방법으로 처리하자.

예전방법 (비추)

.gitmodules를 문법에 맞게 먼저 만든다. 파일이 잘 인식되는지는 git config -f .gitmodules --list로 확인해 볼 수 있다.

.gitmodules 파일에 문제가 없다면 다음 아래 스크립트를 실행시켜 .gitmodules 파일 속 submodule 들을 일괄 등록한다.

#!/bin/sh

set -e

git config -f .gitmodules --get-regexp '^submodule\..*\.path$' |
    while read path_key path
    do
        url_key=$(echo $path_key | sed 's/\.path/.url/')
        url=$(git config -f .gitmodules --get "$url_key")
        git submodule add "${url}" "${path}" || true
    done

REF

... ... ... ...
Back