LoginSignup
14
14

More than 5 years have passed since last update.

gitのsubmoduleをmvする方法

Last updated at Posted at 2012-10-28

git version 1.7.2.3の方法

gitで管理されてるファイルやディレクトリをmvする場合、普通git mvするわけだけども、その中にsubmoduleが含まれていると以下のようなエラーが出た

[$] <git:(develop*)> git mv zsh.d .zsh.d
zsh: correct '.zsh.d' to 'zsh.d' [nyae]? n
fatal: source directory is empty, source=zsh.d/auto-fu.zsh, destination=.zsh.d/auto-fu.zsh

ぐぐったらこんなページが見つかった
http://noone.org/blog/English/Computer/VCS/How%20to%20move%20a%20git%20submodule.html
要はgitのバグで、まだ修正されてないから手動で回避しないといけないらしい。

で、その回避の仕方(大体上記ページに書いてあることを訳しただけ)

  1. 普通にmvする (mv zsh.d .zsh.d)
  2. mvした先のファイルをgit addする(git add zsh.d)
  3. mvする前のインデックスをgit rm --cachedで消す(git rm -r --cached .zsh.d)
  4. .gitmodule ファイルの、mvしたところの記述を書き換える
  5. 普通にコミット

これでsubmoduleのmvが出来た。めんどくさ...

git version 1.7.10.2 (Apple Git-33) の方法

※色々試行錯誤しながらやってたので、ちょっと自信無いです

  1. 普通にmvする (mv zsh.d .zsh.d)
  2. mvした先のファイルをgit addする(git add zsh.d)
  3. mvする前のインデックスをgit rm --cachedで消す(git rm -r --cached .zsh.d)
  4. .gitmodule ファイルの、mvしたところの記述を書き換える

ここまでgit version 1.7.2.3と同じ。しかしこのversionだとこの後git statusさえ出来ない。git status すると

fatal: Could not chdir to '../../../../zsh.d/auto-fu.zsh': No such file or directory
fatal: 'git status --porcelain' failed in submodule .zsh.d/auto-fu.zsh

みたいなエラーが出る。ので、更に手を加える必要がある。

  1. submoduleを取り込んでいる方のgitプロジェクトの.git内の以下のファイルの中の記述を、mvしたディレクトリのところを書き換える。
.git/modules/[renameしたディレクトリ名]/[submoduleディレクトリ名]/config
  1. ↑とは別に、submoduleのディレクトリの.gitというファイルの中に記述されているディレクトリ名を新しいものに変える。

これで直る。多分。

っていうか

ここまで来ると新しくgit submodule addして古い方削除した方が早い気がする。
もっと簡単な方法あったら教えて下さい

14
14
0

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
14
14