gitでサブモジュールを削除する


2011年 03月 01日

問題

git submodule
で他のリポジトリ(以下「サブモジュール」)の内容を埋め込むことが簡単にできるのですが、
ごく稀に追加したサブモジュールを削除したくなる場合があります。
サブモジュールの追加や更新は git submodule addgit submodule update で簡単にできるものの、
何故か git submodule rm サブコマンドはありません。
どうすれば削除できるのでしょうか。

解決方法

submodule_name='The name of a submodule you want to remove.'
submodule_path="$(git config --file .gitmodules --get "submodule.$submodule_name.path")"
git rm --cached "$submodule_path"
git config --file .gitmodules --remove-section "submodule.$submodule_name"
git add .gitmodules
git commit -m "Remove submodule $submodule_name"

補足

gitリポジトリの各種設定は .git/config に含まれており、
これを直接エディタで編集することもできますが、git configで設定内容の読み書きをスクリプトから簡単に行うことができます。

サブモジュールの設定は .gitmodules に含まれているのですが、
この書式は .git/config と全く同じなので git config で読み書きすることができます。