如何使用子模块更新GitHub分叉存储库

时间:2017-12-21 03:36:22

标签: git synchronization git-submodules

我的问题与以下内容类似: 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

...

我的问题是,我也想把这些子模块分成我的本地仓库。 可以更新子模块,也可以更新根上游(根上游可以更新其子模块散列)。 我怎么能将根上游及其子模块同步到我的本地仓库?

1 个答案:

答案 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

如果您在任何子模块中自己进行了任何更改,则必须在原始远程主分支的基础上对它们进行重新定义。