使用本地Git子模块进行部署

时间:2013-07-29 21:28:09

标签: git deployment git-submodules

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

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:1)

  

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

后者:它存储special entry(作为seen here),这意味着如果您已经完成:

  • 子模块中的任何结账(即你已经改变了HEAD但没有修改了任何文件),你需要回到父仓库,添加,提交并推送新的特殊条目它反映了子模块的新HEAD SHA1
  • 在您的子模块中
  • 任何文件修改,您需要:
    • 添加,提交并将该子模块推回其原点
    • 返回父级仓库,添加,提交并推送。

您的收件后挂钩可以处理git submodule update --init --recursive步骤 请参阅this hook for instance