我的问题与以下内容类似: How do I update a GitHub forked repository? 但它有点复杂,因为我的上游是一个非常大的项目,有很多子模块。
git remote -v
navi_dev ssh://gitolite@hi0vm066.de.bosch.com/navi_development (fetch)
navi_dev ssh://gitolite@hi0vm066.de.bosch.com/navi_development (push)
origin cmg1szh@szhgit01.apac.bosch.com:navi_int_internal.git (fetch)
origin cmg1szh@szhgit01.apac.bosch.com:navi_int_internal.git (push)
nave_dev是我想从中获取的根目录,而origin是我的本地分支。
但是在这个项目中,有很多子模块: 如:
[submodule "ai_osal_common"]
path = ai_osal_common
url = gitolite:ai_osal_common
[submodule "ai_osal_darwin"]
path = ai_osal_darwin
url = gitolite:ai_osal_darwin
...
我的问题是,我也想把这些子模块分成我的本地仓库。 可以更新子模块,也可以更新根上游(根上游可以更新其子模块散列)。 我怎么能将根上游及其子模块同步到我的本地仓库?
答案 0 :(得分:2)
在每个子模块中执行与您提供的链接相同的操作,但这将导致每个子模块都具有其各自主分支中的最新子模块,这可能不正确。
所以我的建议如下:
# Fetch all the branches of navi_dev remote into remote-tracking branches:
git fetch navi_dev --recurse-submodules
# Make sure that you're on your master branch:
git checkout master --recurse-submodules
# Rewrite your master branch so that any commits of yours that
# aren't already in navi_dev/master are replayed on top of that
# other branch:
git rebase navi_dev/master
如果您在任何子模块中自己进行了任何更改,则必须在原始远程主分支的基础上对它们进行重新定义。