为什么要使用git裸存储库进行网站部署?

时间:2013-11-26 00:46:51

标签: git

我开始通过git部署一些网站插件。

我已经浏览了网上的一些教程,并且他们都建议在Web服务器上创建一个裸的远程存储库,并使用更新后的挂钩将其签出到DocumentRoot目录中。我已经把这一切都解决了,没有太多问题。

为什么我们将存储库与工作目录分开?将DocumentRoot目录用作存储库然后使用htaccess阻止公共访问任何.git内容有什么问题?

3 个答案:

答案 0 :(得分:4)

实际上,配置不当的htaccess固有的安全风险本身就是一个很好的理由,但主要原因是默认情况下,你无法推送到非裸机库的签出分支。 (它可以启用,但需要git reset --hard来更新工作树,并不比拥有单独的部署目录简单。)

答案 1 :(得分:0)

这里有几个问题,虽然相关实际上是分开的:

  

1 - 为什么我们将存储库与工作目录分开?

因为git默认会阻止你推送到签出的分支。因此,您可以永远不会推送到工作目录,因为根据定义,如果它在磁盘上已经签出。

  

2 - 所有人都建议在Web服务器上创建一个裸的远程存储库

隐含的问题是:why a bare repo?嗯,一个简单的回购只是一个没有签出的git仓库。因此,您可以在裸仓库上推送到任何分支。有些人认为维护起来比较简单。

第二个暗示的问题:is there an alternative to bare repos?是的,如上所述,限制仅适用于已签出的分支机构。所以你仍然可以自由地推送到一个未检出的分支 - 也许"部署"然后有一个钩子将未检出的分支合并到你的工作目录。

答案 2 :(得分:0)

  1. 将DocumentRoot用作git工作目录:

    • 使用pull进行更新,需要外部触发器或cron或手动执行
    • 需要限制对.git目录的http访问
    • DocumentRoot中的即时编辑/黑客可以使用diff来与git历史进行比较,有利于调试/查找问题
    • Switch分支很容易
  2. 使用单独的裸git repostory

    • 用户可以推送到此回购并使用更新后挂钩来更新DocumentRoot
    • 通常没有人想在git bare repo中做即时黑客攻击,DocumentRoot中的修改无法与git历史记录进行区分
    • DocumentRoot很干净
    • Switch分支可能需要修改hook
  3. 所以,似乎单独的裸git repo更干净,更易于使用,除了需要设置更新后的钩子。

    计划1也可以使用,在小型项目中使用它或开发机器很好,但要注意.git目录的访问权限,尤其是在更改Web服务器时。例如:nginx不支持.htaccess,它通常与其他项目文件一起存储在git中。