1

这是当前的设置。我有一个:

  • 网络驱动器上的中央 Git 存储库(源)
  • 我本地硬盘上的工作副本
  • Web 服务器上的存储库,用于将项目部署到

我使用一个子模块来引入一个托管在 GitHub 上的框架。我的理解是,当我将 subdmodule 添加到我的存储库时,它会将存储库从 GitHub 下载到我的本地工作目录,然后我可以在其中签出所需的版本,并最终推送到源。

当我将代码提交到原始存储库时,它是否也推送了框架的副本,还是仅仅因为缺少更好的词而存储了指向远程存储库的引用/指针?

我问是因为我想创建一些我经常与这个框架一起使用的第三方工具的存储库(目前不使用 Git 管理),以便我可以轻松地将它们拉入需要它们的项目中。目标是在需要时更新我的​​本地第三方存储库,并使用更新的版本更新各个项目。

我部署项目的方式是将它们推送到 Web 服务器,然后使用post-receive钩子部署应用程序。潜在的问题可能是,如果 Git 不推送子模块本身,而只推送一个指针,我认为就是这种情况,因为这git submodule init && git submodule update是为了,Web 服务器将无法获取子模块内容的副本。

我能想到的最简单的解决方案是简单地使用 GitHub 或 Bitbucket 等面向公众的服务托管这些第三方工具,但我想知道是否还有其他方法?

4

1 回答 1

1

当我将代码提交到原始存储库时,它是否也推送了框架的副本,还是仅仅因为缺少更好的词而存储了指向远程存储库的引用/指针?

后者:它存储一个特殊条目(如此处所示),这意味着如果您已完成:

  • 子模块中的任何结帐(即您已更改 HEAD 但已修改任何文件),您需要返回父 repo,添加、提交和推送反映子模块的新 HEAD SHA1 的新特殊条目
  • 任何文件修改,您需要:
    • 添加、提交并将该子模块推回其原点
    • 回到父仓库,添加、提交和推送。

你的 post-receive 钩子可以处理一个git submodule update --init --recursive步骤。
例如看这个钩子

于 2013-07-30T07:01:04.333 回答