我们有主要的git存储库和一个git子模块。对于这个问题,主存储库只有一个主分支,子模块确实有两个分支 - X 和 Y 。
让我们说Coder A 刚刚切换到子模块分支 X 并应用了一些小改动。
编码器 B 它位于子模块分支 Y 。
现在 A 推送到远程和 B 拉动 - 然后它似乎不是 B 的活动子模块提交(在他们的本地机器)自动更改为 A 在分支 X 上推送的提交,即使 A 主动提交已更改的子模块提交。
相反,对于 B ,分支 Y 上的版本保持活动状态。
如果现在 B 从存储库手动拉出并将分支设置为 X ,则一切都会再次运行。
当从主存储库中提取时,我们如何实现子模块更改/活动提交自动同步?
如果能让任何解释变得更容易,我们将Source Tree用作Git GUI。
答案 0 :(得分:1)
然后它就像B&#39的活动子模块提交(在他们的本地机器上)被自动更改为A在分支X上推送的提交,即使A主动提交已更改的子模块提交
你需要确定A子目录的提交和推送,然后然后添加/提交并从父仓库推送(为了记录新的子模块SHA1)
Since Git 1.7.5,git 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