Git子模块 - 从主仓库拉出时如何更新子模块

时间:2017-07-05 04:02:21

标签: git github version-control git-submodules atlassian-sourcetree

我们有主要的git存储库和一个git子模块。对于这个问题,主存储库只有一个主分支,子模块确实有两个分支 - X Y

让我们说Coder A 刚刚切换到子模块分支 X 并应用了一些小改动。
编码器 B 它位于子模块分支 Y

现在 A 推送到远程和 B 拉动 - 然后它似乎不是 B 的活动子模块提交(在他们的本地机器)自动更改为 A 在分支 X 上推送的提交,即使 A 主动提交已更改的子模块提交。
相反,对于 B ,分支 Y 上的版本保持活动状态。

如果现在 B 从存储库手动拉出并将分支设置为 X ,则一切都会再次运行。

当从主存储库中提取时,我们如何实现子模块更改/活动提交自动同步?

如果能让任何解释变得更容易,我们将Source Tree用作Git GUI。

1 个答案:

答案 0 :(得分:1)

  

然后它就像B&#39的活动子模块提交(在他们的本地机器上)被自动更改为A在分支X上推送的提交,即使A主动提交已更改的子模块提交

你需要确定A子目录的提交和推送,然后然后添加/提交并从父仓库推送(为了记录新的子模块SHA1)

Since Git 1.7.5git pull也应该更新子模块 使用git submodule update --init --recursive

仔细检查

但不要忘记"更新子模块"只会检查它的SHA1,而不是分支。除非submodule is set to track a branch,否则您执行git submodule update --recursive --remote 即使这样,它也会拉一个分支(X或Y),而不是两者。

  

一位朋友刚刚告诉我们,朋友机上的回购邮件可能已被破坏。所以我们从Origin重新克隆它,现在一切正常。

     

我现在正在研究跟踪具有子模块的分支,以避免检查出HEAD"问题。你能推荐一下吗?

如" True Nature of Submodules"中所述,子模块最初始终处于分离的HEAD模式。
您仍然可以强制它跟随分支并自行更新:请参阅" git submodule tracking latest"。
这意味着以下命令将在拉出分支后更新子模块内容,所述子模块必须遵循:

git submodule update --remote