如何使包含子模块的本地仓库保持最新

时间:2017-08-24 01:45:38

标签: git recursion github

我有一个包含多个子模块的本地存储库。 我想保持我的本地存储库的主分支始终与上游存储库保持同步(上游存储库也包含相同的子模块;这里“最新”意味着我的本地存储库就像上游的镜像版本在父级回购和子模块方面)。我对--recurse-submodules中的git pull选项感到困惑。

a): git pull origin master --recurse-submodules

b): git pull origin master

我想知道--recurse-submodules究竟是什么意思? 如果我不添加此选项,我的本地仓库中的子模块是否会更新?

我还发现了仅更新子模块的命令:git submodule update (--remote)。除了a)b)之外,我还需要执行此命令吗? 顺便说一下,任何人都可以让我知道常见/典型的工作流程,以保持子模块的本地仓库是最新的吗?

PS:我的子模块都已初始化。我正在与github合作。 Git版本2.11.0

谢谢!

1 个答案:

答案 0 :(得分:0)

你问题中的三个命令各有不同的东西。让我们来看看每一个:

  • git pull origin master只需从您的源存储库中提取最新版本的父repo。它不会更新子模块的修订哈希值。

  • git pull origin master --recurse-submodules会将每个子模块更新为其原始存储库中的最新版本。这将显示由于子模块的更新修订哈希值导致的父仓库中的挂起更改。

    但等待:如果您为子模块指定了“非默认”分支,这可能会产生意想不到的后果,因为它会从其“原始”存储库更新子模块,而不是指定的科。有关详细信息,请参阅此列表中的最后一个命令。

  • 您在问题帖子中说git submodule update --remote,但我认为您实际上正在寻找git submodule update --recursive --remote(后者会递归搜索您的工作树,而不是前者只查看您当前的文件夹)。那说......

    git submodule update --recursive --remotegit pull --recurse-submodules类似,但有利于尊重.gitmodules.git/config文件中指定的任何“非默认”分支。