我开始通过git部署一些网站插件。
我已经浏览了网上的一些教程,并且他们都建议在Web服务器上创建一个裸的远程存储库,并使用更新后的挂钩将其签出到DocumentRoot目录中。我已经把这一切都解决了,没有太多问题。
为什么我们将存储库与工作目录分开?将DocumentRoot目录用作存储库然后使用htaccess阻止公共访问任何.git内容有什么问题?
答案 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)
将DocumentRoot用作git工作目录:
使用单独的裸git repostory
所以,似乎单独的裸git repo更干净,更易于使用,除了需要设置更新后的钩子。
计划1也可以使用,在小型项目中使用它或开发机器很好,但要注意.git目录的访问权限,尤其是在更改Web服务器时。例如:nginx不支持.htaccess,它通常与其他项目文件一起存储在git中。