我已经创建了一个带有子模块的git存储库。我可以告诉子模块本身更改其远程存储库路径,但我不确定如何告诉父存储库如何更改子模块的远程存储库路径。

如果我运气不好,不得不手动操作,我也不会感到惊讶,因为即使删除子模块也不容易。


当前回答

你应该可以编辑.gitmodules文件来更新URL,然后运行git子模块sync——recursive来将更改反映到超项目和你的工作副本中。

然后你需要转到.git/modules/path_to_submodule目录,修改它的配置文件来更新git路径。

如果回购历史记录不同,那么你需要手动签出新的分支:

git submodule sync --recursive
cd <submodule_dir> 

git fetch
git checkout origin/master
git branch master -f
git checkout master

其他回答

你应该可以编辑.gitmodules文件来更新URL,然后运行git子模块sync——recursive来将更改反映到超项目和你的工作副本中。

然后你需要转到.git/modules/path_to_submodule目录,修改它的配置文件来更新git路径。

如果回购历史记录不同,那么你需要手动签出新的分支:

git submodule sync --recursive
cd <submodule_dir> 

git fetch
git checkout origin/master
git branch master -f
git checkout master

简单来说,你只需要编辑.gitmodules文件,然后重新同步和更新:

通过git命令或直接编辑文件:

git config --file=.gitmodules -e

或者是:

vim .gitmodules

然后重新同步和更新:

git submodule sync
git submodule update --init --recursive --remote

一种蛮力方法:

更新超模块中的.gitmodules文件以指向新的子模块url, 添加并提交更改到supermodule/.gitmodules, 在您的计算机上的其他地方创建一个新的超级模块克隆(确保.gitmodules文件的最新更改反映在克隆中), 将工作目录更改为超模块的新克隆, 在子模块上运行git子模块update——init——远程路径到子模块,

果不其然!超级模块的新克隆中的子模块配置正确!

Git配置——file=。Gitmodules -e打开默认编辑器,您可以在其中更新路径

对我有用的(在Windows上,使用git版本1.8.3.msysgit.0):

用URL更新.gitmodules到新的存储库 从”中删除相应的行。git /配置文件 删除文件中对应的目录。Git /modules/external“目录(”。Git /modules”,适用于最新的Git版本) 删除签出的子模块目录本身(不确定这是否有必要) 运行git子模块init和git子模块update 确保检出的子模块处于正确的提交位置,并提交该子模块,因为哈希值可能会不同

在做了所有这些之后,一切都处于我所期望的状态。我想其他用户在更新时也会有类似的痛苦——在提交消息中解释这些步骤是明智的!