私は次のgit構造を持っています
- git-repo a
-- subdirectory 2015
--- git-submodule b
-- git-submodule c
--- git-submodule d
gitサブモジュールcをフォルダー2015に移動したいと思います。これを行うための「汚い方法」を知っています(.git/configを変更し、.git/modulesファイル内のいくつかのファイルでgitdirを変更する必要があります)
私は最近、 git mv がこれを実行できるはずだと読みました。
git mv c 2015/
これは、ネストされたサブモジュール (私の場合は d) がないリポジトリでは問題なく機能します。ただし、ディレクトリでこのコマンドを実行すると、次のようなエラーが発生します
fatal: Not a git repository: d/../../.git/modules/c/modules/d
fatal: 'git status --porcelain' failed in submodule 2015/c
(注、このエラーは、上記の移動を実行した後に git ステータスで発生します)
この移動を行うクリーンな方法 (つまり、.git/modules ファイルのパスを手動で変更する必要のない方法) を知っている人はいますか?
編集: (2015 年 6 月 10 日)
git構成ファイルの変更を伴わない私の現在の最良の解決策は(最初に、dへのすべての変更がコミットされ、どこかにプッシュされていることを確認してください)
rm c/d -rf
git mv c 2015
cd 2015/c
git submodule update
編集: (2015 年 8 月 10 日)
さらに邪魔にならない回避策
git mv c 2015
rm 2015/c/d/.git
cd 2015/c
git submodule update
編集:(2018年9月21日)
git バージョン 2.19 以降。これは修正されgit mv
、期待どおりに動作します。