是删除Git子模块中的旧分支安全w.r.t. “超级模块”的可用历史?

时间:2011-08-18 10:36:40

标签: git git-submodules

如果我使用这样的工作流程:

  • app_repo app2_repo 有一个共同的子模块 library_repo
  • library_repo 中,我创建了一个 library_feature 分支来处理新功能,同时让 master 保持稳定。
  • app2_repo 需要新功能,因此我跟踪其中的子模块开发(即我更新子模块引用,因为提交是对 library_repo )。与此同时,也正在对 app2_repo 源进行更改(该应用程序也在开发中)。
  • 功能完成后,我将 library_repo 中的 library_feature 分支合并回 library_repo master 分支。
  • 发展仍在继续, app2_repo 现在再次包含 library_repo
  • 我删除 library_repo library_feature 分支,现在已将历史记录合并到 master ,以保持“干净”。

我是否刚刚失去了检查历史性的 app2_repo SHA的能力,并且使用 library_repo 的相关历史提交正确更新了“子模块更新”,因为我删除了< strong> library_feature 它们所在的分支,或者所有相关提交仍然存在,因为历史现在与 master 共享,现在它已合并?

1 个答案:

答案 0 :(得分:3)

所有相关的提交仍然存在。

当您使用特定版本的子模块创建提交时,存储在“超级模块”树中的唯一信息是子模块应该位于的提交的对象名称(即SHA1sum)。因此,一旦将分支合并到master中就删除它将没有区别 - 超模块中的所有旧提交都将指向仍在子模块的master历史中的提交的对象名称。

如果你删除了一个未合并到其他分支的分支,那么该分支上的未合并提交最终将被垃圾收集,这可能会产生你担心的问题,但你在这里明确说过在删除分支之前,所有内容都已合并。