在生产中使用 Web 根目录下的 git

发布于 2024-09-07 12:43:55 字数 155 浏览 2 评论 0原文

我是一个狂热的 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

一抹苦笑 2024-09-14 12:44:20

如果您想在生产中使用 git,您需要确保 .git 无法通过网络服务器访问。您可以通过将 .git 放置在 Web 根目录之外并设置 GIT_DIR 环境变量,或者相应地配置您的 Web 服务器来完成此操作。

apache 下的一种可能性是以下重写规则:

RewriteRule ^(.*/)?\.git/ - [F,L]

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:

RewriteRule ^(.*/)?\.git/ - [F,L]
Oo萌小芽oO 2024-09-14 12:44:16

除了明显的美观原因之外,当您在 /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 the core.worktree setting). Additionally, I have a post-receive hook to run git checkout -f, so all I have to do from my local computer is push to the production branch, and the rest is automatically taken care of.

[旋木] 2024-09-14 12:44:11

这么好……但不知何故又错了。

在生产环境中,您需要关注:

  • 访问安全性(如何复制/部署交付)
  • 停止应用程序的正确进程
  • 部署新版本
  • 启动正确的进程(以正确的顺序)
  • 监控
  • 报告

版本控制不是该图片的一部分:您可能想要在生产环境中安装的任何额外工具都是额外的潜在故障点(并且需要自己的管理和监控)。
除非它与您正在部署的应用程序有直接链接(“直接链接”,如“如果没有那个额外的工具,您的应用程序将无法工作”),否则它不应该位于生产平台上。

制作 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:

  • access security (how do you copy/deploy a delivery)
  • stopping the right process of your app
  • deploying a new version
  • starting the right processes (in the right order)
  • monitoring
  • reporting

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文