在生产中使用 Web 根目录下的 git
我是一个狂热的 git 用户;我在开发中使用git;在分阶段,但不在生产中。
在生产环境中,是否有任何充分的理由不在 Web 根目录 (/var/www/) 下使用 git?我一直在考虑要么使用主分支作为生产分支,要么创建一个生产分支。
推制作大师的声音真好听……
I'm an avid git user; I use git in development; in staging, but not in production.
Are there any good reasons not to use git below the web root (/var/www/) in a production environment? I've been considering either using the master branch as the production branch, or creating a production branch.
push production master sounds so nice...
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
如果您想在生产中使用 git,您需要确保 .git 无法通过网络服务器访问。您可以通过将 .git 放置在 Web 根目录之外并设置 GIT_DIR 环境变量,或者相应地配置您的 Web 服务器来完成此操作。
apache 下的一种可能性是以下重写规则:
If you want to use git in production, you need to make sure .git is not accessible through the webserver. You can do this by either placing .git outside of the web root and setting the GIT_DIR environment variable, or by configuring your webserver accordingly.
One possibility under apache would be the following rewrite rule:
除了明显的美观原因之外,当您在 /var/www 中拥有存储库时,权限通常可能是一个问题。
在我的生产服务器上,我在分支
product
的私有目录中拥有一个裸存储库,并在 /var/www 中拥有一个独立的工作树(请参阅core.worktree
设置)。此外,我有一个接收后钩子来运行 git checkout -f ,因此我在本地计算机上要做的就是推送到生产分支,其余的会自动得到照顾。Apart from the obvious aesthetic reason, permissions can often be a problem when you have a repository in /var/www.
On my production server, I have a bare repository in a private directory on branch
production
and a detached worktree in /var/www (see thecore.worktree
setting). Additionally, I have a post-receive hook to rungit checkout -f
, so all I have to do from my local computer is push to theproduction
branch, and the rest is automatically taken care of.这么好……但不知何故又错了。
在生产环境中,您需要关注:
版本控制不是该图片的一部分:您可能想要在生产环境中安装的任何额外工具都是额外的潜在故障点(并且需要自己的管理和监控)。
除非它与您正在部署的应用程序有直接链接(“直接链接”,如“如果没有那个额外的工具,您的应用程序将无法工作”),否则它不应该位于生产平台上。
制作
git 存档
< /a> 从你的 master 分支作为一个很好的 tar 存档,其中包含一个“version.txt”来标识已完成该存档的 repo/SHA1,并将其 sftp/srsynch 到生产平台。从那时起,不再需要 Git。
so nice... and yet so wrong somehow.
In production environment, you need to be concerned with:
Version Control is not part of that picture: any extra tool you might want to install in a production environment is an extra potential failure point (and need administration and monitoring of its own).
Unless it has a direct link with the application you are deploying ("direct link" as in "your app won't work without that extra tool"), it shouldn't be on a production platform.
Make a
git archive
from your master branch as a nice tar archive, with a "version.txt" in it to identify the repo/SHA1 from which that archive has been done, and sftp/srsynch it to the production platform.From there, no more Git needed.