【问题标题】:Git submodule - How to keep the submodule updated when pulling from the main repoGit子模块-从主仓库拉出时如何保持子模块更新
【发布时间】:2017-07-05 04:02:20
【问题描述】:

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

假设 Coder A 刚刚切换到子模块分支 X 并应用了一些小的更改。
编码器 B 它位于子模块分支 Y 上。

现在 A 推送到远程并且 B 拉取 - 那么它看起来不像 B 的活动子模块提交(在他们的本地machine) 自动更改为 A 推送到分支 X 的提交,即使 A 主动提交了更改的子模块提交。
而对于 B,他们在分支 Y 上的版本保持活动状态。

如果现在 B 确实手动从存储库中提取并将分支设置为 X,那么一切都会再次运行。

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

如果这样可以使任何解释变得更容易,我们将使用 Source Tree 作为 Git GUI。

【问题讨论】:

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


    【解决方案1】:

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

    您需要确保 A 已提交并从子模块推送,然后然后添加/提交并从父 repo 推送(以记录新的子模块 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),而不是两者。

    一位朋友刚刚告诉我们,我朋友机器上的 repo 可能已损坏。所以我们从 Origin 重新克隆了它,现在一切正常。

    我现在正在研究使用子模块跟踪分支,以避免“签出 HEAD”问题。你能推荐一下吗?

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

    git submodule update --remote
    

    【讨论】:

    • 谢谢,不过我不确定我是否完全理解。我从父 repo 中提取了 SHA-1 更改,但似乎代码没有更改/仍然与以前相同。从父仓库中提取新的 SHA-1 子模块是否足以检查子模块上的正确提交?签出的提交也应该在子模块的 Git / 源树中可见,对吧?
    • @keyboard no:你在父级中拉取的 SHA1 是一个 gitlink。见stackoverflow.com/a/32327200/6309。在子模块中,您应该看到与(分离的)HEAD 相同的 SHA1。
    • 对不起,我已经点击并阅读了你的帖子,我仍然不明白git链接是什么,你能详细说明一下吗?拉一个 git link SHA-1 和用某个 SHA-1 签出一个特殊的提交有什么区别?
    • 我刚刚和同事做了以下测试:我更改了父 repo 中的一个字符串和子模块 repo 中的一个字符串。然后我承诺并推动两者。然后我的同事从主存储库中拉出,源树向我的同事显示了子模块存储库的新提交 SHA-1 作为提交详细信息中的“子项目提交”,但此提交未在子模块存储库中签出(因此代码没有改变,并且改变的字符串不在我同事的机器上)。只有通过手动从子模块 repo 中提取,字符串才会改变。我们做错了什么?
    • 您还需要添加 gitlink:首先在子模块中提交(并推送),然后添加、提交和推送以包含 glitlink。 (stackoverflow.com/a/16581096/6309, stackoverflow.com/a/19354410/6309)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-25
    • 2016-09-28
    • 2017-10-05
    • 1970-01-01
    • 2014-12-08
    • 2021-10-08
    相关资源
    最近更新 更多