Git Submodule設定されているディレクトリを持っているディレクトリをリネーム(移動)した時にちょっとハマった時のメモ。
+ sample.git
+ dirA
+ submod
みたいな構成でsubmodにsubmodule設定がされている場合。
ダメな処理方法
git mv dirA dirB
を実行する。
これ自体は問題なく実行できるが、git status
を実行したらエラー出た。
fatal: Could not chdir to '../../../../../sample.git/dirA/submod': No such file or directory
fatal: 'git status --porcelain' failed in submodule sample.git/dirB/submod
ふーん。ダメなの。。。
一旦元に戻すか。
mv dirB dirA #この時点でgit statusが復帰
git reset HEAD dirA dirB #git上の変更を無しにする
#大丈夫な処理方法
submoduleを一旦削除してから対象ディレクトリをリネームして、再度submodule設定をすれば大丈夫だった。
git submodule deinit dirA/submod #これだけではgit statusに変化無し
rm -rf dirA/submod #この時点でgit statusに変更が認識された
git mv dirA dirB #これでリネーム成功
git submodule add git@foobar.example.com:submod.git dirB/submod #submoduleの再定義
git commit #コミットして完了
submoduleはハマるって噂ではあったけど。
submodule設定しているリポジトリはあまり更新される事ないから余裕ぶって使ってた。
大きなハマりではないけど、未来の自分含む誰か他の人も同じ現象に遭遇するかもしれないのでメモ。