【问题标题】:How to understand workflow of git submodule function如何理解 git 子模块功能的工作流程
【发布时间】:2019-01-31 07:54:26
【问题描述】:

我正在开发 git 子模块:

1) 创建 MASTER 项目 git repo,做一些提交

2) 创建 SUB 项目 git repo,做一些提交

3) 使用 git submodule 功能,将 SUB 添加到 MASTER/somefolder/

4) 然后 Alice 在 SUB 上执行 2 次提交,分支 Alice。

5) 然后 Bob 执行 2 次提交,分支 Bob。

6) 然后我通过子模块函数将 Alice 和 Bob 的提交添加到 SUB 和 MASTER 中。


在这个过程中,我有些困惑:

1) 在初始化过程中,将 SUB 添加到 MASTER 中,MASTER 将如何记住在 SUB 中添加提交?

例如,如果 SUB 有 2 个分支,那么 MASTER 会记住哪些分支的提交?

如果是使用 SUB 的 master 分支?还是使用 SUB 的 HEAD?

如果使用 HEAD,那么如果我将 HEAD 指向 SUB 的另一个分支(不是 master),会发生什么?

2) 当我将 Alice 的 2 次 SUB 提交添加到 MASTER 时,MASTER 怎么知道我想添加 Alice 的 2 次提交,而不是 Bob 的?

据说 MASTER 不关心 SUB 的分支,只关心 SUB 的提交。


这是我对git子模块功能实现的理解:

MASTER 只记得一个提交 ID,例如 abcdefg123456。

那么如果你执行git submodule update --init --recursive,MASTER 将下载位于 abcdefg123456 的分支中的所有提交,直到 abcdefg123456 提交。

对吗?


如果上面是对的,那我就一头雾水了,分支Alice和Bob都加commits,如果我在Alice用的是abcdefg123456,那怎么加Bob的commits呢?

【问题讨论】:

    标签: git github git-submodules


    【解决方案1】:

    主 git 存储库 (MASTER) 及其子模块 (SUB) 将被视为独立存储库

    您可能已经知道,一旦您在任何 SUB 目录(或子目录)中cd,所有 git 命令都适用于 SUB(并且仅适用于它)。然后如果你 cd 回到任何 MASTER 目录(不是任何其他子模块目录),所有 git 命令都引用 MASTER。

    所以你是对的,关于 SUB,MASTER 唯一记得的就是 远程地址单个 sha1 引用(并且没有分支名称或标签名称)。

    【讨论】:

      猜你喜欢
      • 2010-12-08
      • 1970-01-01
      • 2012-03-13
      • 1970-01-01
      • 2021-11-09
      • 2011-09-14
      • 2011-08-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多