git - 更改Git的远程存储库中的子模块

  显示原文与译文双语对照的内容

我已经创建了一个git仓库,其中包含一个子模块。 我能够告诉子模块自己更改它的远程存储库路径,但是我不确定如何告诉父存储库如何更改子模块的远程存储库路径。

如果我运气不佳,并且不得不手工做一些事情,我不会感到惊讶,即使删除子模块也不容易。

编辑:我最终摆脱子,只是有一个工作副本在另一个工作副本,所以我现在出于好奇而问。

下面给出的指令似乎在某些情况下工作,但显然在其他情况下没有。

时间:

你应该能够编辑 .gitmodules 文件以更新 URL,然后运行 git submodule sync 以反映对superproject和工作副本的更改。

实际上,一个补丁已经提交 2009年04月 澄清 gitmodule 角色。

所以现在 gitmodule文档 。xml还没有包括:

位于git工作树的top-level目录中的.gitmodules 文件是一个文本文件,它具有与需求 -of linkgit:git-config 1的语法相匹配的语法。
[NEW]:
因为这个文件是由Git管理的,它跟踪项目子模块的+records 。
存储在这里文件中的信息用作对存储在项目配置文件中的记录的权威版本的提示。
用户特定记录更改( 例如。 考虑到由于联网情况而导致的子模块url的差异,应该在记录更改时对配置文件进行收费( 例如 ) 。 +due到子模块源的重定位应用于这里文件。

这几乎确认了 的回答。


如果你遵循这个 git模块教程,你会看到需要一个" git submodule init"来添加子模块库的url 。git/config 。

" git submodule sync"被添加在 2008年08月 正是为了简化这一任务url更改时(特别是子的数量很重要) 。
该命令关联的脚本非常简单:


module_list"$@" |
while read mode sha1 stage path
do
 name=$(module_name"$path")
 url=$(git config -f. gitmodules --get submodule."$name".url)
 if test -e"$path"/.git
 then
 (
 unset GIT_DIR
 cd"$path"
 remote=$(get_default_remote)
 say"Synchronizing submodule url for '$name'"
 git config remote."$remote".url"$url"
 )
 fi
done

目标仍然是: git config remote."$remote".url"$url"

为我工作的( 在 Windows 上使用git版本 1.8.3 。hcs 。0 ):

  • 更新。gitmodules使用新存储库的路径
  • 从"。git/配置"文件中删除相应的行
  • 删除".git/modules/external" 目录中相应的目录
  • 删除签出的子模块目录本身( 不确定是否需要)
  • 运行 git submodule initgit submodule update
  • 确保签出的子模块处于正确的提交,并提交,因为哈希可能是不同

完成所有这些之后,一切都处于我期望的状态。 我认为存储库的其他用户在更新时也会有类似的痛苦- 在提交消息中解释这些步骤是明智的 !

只需编辑你的。git/config 。 文件即可。 例如如果你有一个 "公用"模块,你可以在super-module中执行这里操作:


git config submodule.common.url/data/my_local_common

...