13
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

git submodule定義があるディレクトリのリネーム

Posted at

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設定しているリポジトリはあまり更新される事ないから余裕ぶって使ってた。
大きなハマりではないけど、未来の自分含む誰か他の人も同じ現象に遭遇するかもしれないのでメモ。

13
7
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?