Answers:
您应该只能够编辑.gitmodules
文件来更新URL,然后运行git submodule sync
以将更改反映到超级项目和工作副本中。
git submodule foreach -q git config remote.origin.url
看“实际”子模块的网址
.git/config
使用git 2.1.0 更新。在运行之前,我必须同时.gitmodules
进行.git/config
手动更新和更新,才能更新git submodule sync --recursive
我的子模块。
git submodule update --init --recursive --remote
实际上将存储库更改为新远程服务器的关键步骤
这些命令将在命令提示符下完成工作,而不会更改本地存储库中的任何文件
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 add .gitmodules
git commit -m "modified submodule URL"
git push origin master
简单来说,您只需要编辑.gitmodules文件,然后重新同步和更新:
通过git命令或直接编辑文件:
git config --file=.gitmodules -e
要不就:
vim .gitmodules
然后重新同步并更新:
git submodule sync
git submodule update --init --recursive --remote
git submodule update --init
为我工作,--remote
似乎将其绑定到远程仓库的头。
使用Git 2.25(Q1 2020),您可以对其进行修改。
请参阅“ Git子模块的URL已更改 ”和新命令
git submodule set-url [--] <path> <newurl>
原始答案(十年前,2009年5月)
实际上,2009年4月已经提交了补丁程序以阐明gitmodule
角色。
因此,现在gitmodule文档尚不包括:
该
.gitmodules
文件位于git工作树的顶级目录中,是一个文本文件,其语法与linkgit:git-config 1的要求匹配。
[NEW]:
由于此文件由Git管理,因此它将跟踪项目子模块的+记录。
存储在此文件中的信息用作提示来存储存储在项目配置文件中的记录的权威版本。
应该对配置文件进行用户特定的记录更改(例如,考虑由于联网情况而导致子模块URL的差异),同时应对此文件进行要传播的记录更改(例如,由于子模块源的重新定位) 。
这几乎证实了吉姆的答案。
如果您遵循此git子模块教程,则会看到需要将“ git submodule init
”添加子模块存储库URL到.git / config。
正是在2008年8月添加了 “ git submodule sync
”,目的是简化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"
.git/config
通过执行以下操作修改记录:此处也git config submodule."$submodule_name".url "$new_url"
对此进行了描述。
git submodule set-url [--] <path> <newurl>
做什么?
什么对我有用(在Windows上,使用git版本1.8.3.msysgit.0):
git submodule init
和git submodule update
完成所有这些之后,一切都处于我期望的状态。我想存储库中的其他用户来更新时也会遇到类似的麻烦-在您的提交消息中解释这些步骤是明智的!
git submodule update
。遵循其他答案将不会更改./git/modules/external
目录中的内容,因此尝试更新将导致其仍提取不正确的网址。
git submodule set-url [--] <path> <newurl>