問題
git submodule
で他のリポジトリ(以下「サブモジュール」)の内容を埋め込むことが簡単にできるのですが、
ごく稀に追加したサブモジュールを削除したくなる場合があります。
サブモジュールの追加や更新は git submodule add や git 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 で読み書きすることができます。


すごく助かりました!
すげーどうでもいい重箱の隅なんですが,
$ git add .gitmodules を git commit の前に入れた方がより嬉しい感じでした.
ありがとうございます。本文を修正しておきました。
おおう.素早い反応ありがとうございます.
これだと,元のsubmodule だった場所の方がコミットされない気がしますが,
そんなことはないんですかね?
ありがとうございます。全くもってコミットされません。本当にすいません。本文を修正しておきました。
おおう.ありがとうございました!