我已经创建了一个带有子模块的git存储库。我可以告诉子模块本身更改其远程存储库路径,但我不确定如何告诉父存储库如何更改子模块的远程存储库路径。
如果我运气不好,不得不手动操作,我也不会感到惊讶,因为即使删除子模块也不容易。
我已经创建了一个带有子模块的git存储库。我可以告诉子模块本身更改其远程存储库路径,但我不确定如何告诉父存储库如何更改子模块的远程存储库路径。
如果我运气不好,不得不手动操作,我也不会感到惊讶,因为即使删除子模块也不容易。
当前回答
很多人(在这里和在互联网上)建议需要手动编辑或删除多个文件的解决方案。但这真的不需要!
即使在Git 2.25(因此Git子模块set-url <path> <newurl>)不可用的环境中,最简单的解决方案是简单地“取消注册”子模块并使用新的URL重新添加它。
根据Git版本和子模块设置,您可能需要在再次添加<path>之前手动删除它。不需要其他手动操作!
git submodule deinit <path>
rm -rf <path>
git submodule add <repository> [<path>]
之后.gitmodules文件将有一个不同的URL,应该被提交。所有其他位置(配置,工作树)已经被git处理了。
为了解释deinit的作用,我想引用Git手册中的一段话:
Deinit [-f|——force](——all|[——]<path>…) 取消注册给定的子模块,即删除整个子模块。$name部分从.git/config连同他们的工作树。进一步的呼叫[..]将跳过任何未注册的子模块,直到它们再次初始化
其他回答
对我有用的(在Windows上,使用git版本1.8.3.msysgit.0):
用URL更新.gitmodules到新的存储库 从”中删除相应的行。git /配置文件 删除文件中对应的目录。Git /modules/external“目录(”。Git /modules”,适用于最新的Git版本) 删除签出的子模块目录本身(不确定这是否有必要) 运行git子模块init和git子模块update 确保检出的子模块处于正确的提交位置,并提交该子模块,因为哈希值可能会不同
在做了所有这些之后,一切都处于我所期望的状态。我想其他用户在更新时也会有类似的痛苦——在提交消息中解释这些步骤是明智的!
很多人(在这里和在互联网上)建议需要手动编辑或删除多个文件的解决方案。但这真的不需要!
即使在Git 2.25(因此Git子模块set-url <path> <newurl>)不可用的环境中,最简单的解决方案是简单地“取消注册”子模块并使用新的URL重新添加它。
根据Git版本和子模块设置,您可能需要在再次添加<path>之前手动删除它。不需要其他手动操作!
git submodule deinit <path>
rm -rf <path>
git submodule add <repository> [<path>]
之后.gitmodules文件将有一个不同的URL,应该被提交。所有其他位置(配置,工作树)已经被git处理了。
为了解释deinit的作用,我想引用Git手册中的一段话:
Deinit [-f|——force](——all|[——]<path>…) 取消注册给定的子模块,即删除整个子模块。$name部分从.git/config连同他们的工作树。进一步的呼叫[..]将跳过任何未注册的子模块,直到它们再次初始化
只需编辑你的.git/config文件。例如;如果你有一个“common”子模块,你可以在超级模块中这样做:
git config submodule.common.url /data/my_local_common
这些命令将在命令提示符上完成工作,而不会更改本地存储库上的任何文件
git config --file=.gitmodules submodule.Submod.url https://github.com/username/ABC.git
git config --file=.gitmodules submodule.Submod.branch Development
git submodule sync
git submodule update --init --recursive --remote
请查看博客截图:将GIT子模块URL/分支更改为同一存储库的其他URL/分支
Git配置——file=。Gitmodules -e打开默认编辑器,您可以在其中更新路径