我已经创建了一个带有子模块的git存储库。我能够告诉子模块本身更改其远程存储库路径,但我不知道如何告诉父存储库如何更改子模块的远程存储库路径。
如果我运气不好并且必须手动操作,我不会感到惊讶,因为即使删除子模块也不容易。
答案 0 :(得分:876)
您应该只能编辑.gitmodules
文件以更新网址,然后运行git submodule sync
以反映对超级项目和工作副本的更改。
答案 1 :(得分:119)
这些命令将在命令提示符下完成,而不会更改本地存储库上的任何文件
@media handheld and (min-width: 20em), screen and (min-width: 20em) { … }
请查看博客中的屏幕截图:Changing GIT submodules URL/Branch to other URL/branch of same repository
答案 2 :(得分:64)
对我有用(在Windows上,使用git版本1.8.3.msysgit.0):
git submodule init
和git submodule update
完成所有这些之后,一切都处于我期望的状态。我认为存储库的其他用户在更新时会有类似的痛苦 - 在提交消息中解释这些步骤是明智的!
答案 3 :(得分:57)
实际上是一个补丁has been submitted in April 2009来澄清gitmodule
角色。
所以现在gitmodule documentation还没有包括:
位于git工作树顶级目录中的
.gitmodules
文件是一个文本文件,其语法与linkgit:git-config 1的要求相匹配。
[新]:
由于此文件由Git管理,它会跟踪项目子模块的+记录 存储在此文件中的信息用作提示,以填充存储在项目配置文件中的记录的权威版本 应该对配置文件进行用户特定记录更改(例如,考虑到由于网络情况导致的子模块URL的差异),同时应该传播要传播的记录更改(例如,由于子模块源的重定位而导致的+)到这个文件。
这几乎证实了Jim's answer。
如果您遵循此git submodule tutorial,您会发现需要“git submodule init
”才能将子模块存储库URL添加到.git / config。
“git submodule sync
”具有been added in August 2008,以便在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"
答案 4 :(得分:9)
只需编辑 .git / config 文件即可。例如;如果您有一个“common”子模块,您可以在超级模块中执行此操作:
git config submodule.common.url /data/my_local_common
答案 5 :(得分:3)
git config --file=.gitmodules -e
打开默认编辑器,您可以在其中更新路径
答案 6 :(得分:0)
暴力手段:
.gitmodules
文件以指向新的子模块url,supermodule/.gitmodules
,.gitmodules
文件的最新更改反映在克隆中)git submodule update --init path-to-submodule
等等!超级模块的新克隆中的子模块已正确配置!