【问题标题】:Changing ownership after a git post-receivegit post-receive 后更改所有权
【发布时间】:2013-07-19 06:39:13
【问题描述】:

我有以下设置:

两个用户:example 和 git

/home/git/repositories/project.git/hooks/post-receive里面我有一个/home/example/public_html/dev的结帐

所以每次 git push 都会将项目文件发布到http://dev.example.com

问题是,checkout 是从 git 用户执行的,所以 dev 目录下的所有文件都归 git:git 所有,权限是 600。

所以访问http://dev.example.com 不会显示该页面。因为用户 apache 无权访问它。

有人建议在 post-receive 挂钩内做一个 chown。 好吧,那么用户 git 需要是 sudo。 所以我将用户 git 添加为 sudoer。 下一个问题是“抱歉,您必须有一个 tty 才能运行 sudo” 所以我注释掉了#Default requiretty,但是遇到了下一个问题。

让用户 git 成为 sudoer 不是我想要的(不安全),所以我将一切改回正常。

还有其他更安全的选择吗?

可能让 post-receive 钩子触发 dev 文件夹内的一个 php 文件,这个 php 文件将执行结帐?

或者我可以用 apache kan 在浏览器中显示它们的方式将 dev 文件夹符号链接到 /home/git 中的文件夹吗?

【问题讨论】:

  • 如果 post-receive 挂钩将权限更改为 644 而不更改所有权就足够了吗?
  • 那么您需要 sudo 才能 chmod 任何文件,对吗?
  • 不,不是你自己的文件。
  • 酷。我在 dev 文件夹中也有包含 mysql 密码等的文件。它们在结帐时不会被覆盖。所以我的开发人员可以在不知道我的密码的情况下开发和测试那里的代码。这些密码文件归用户示例所有。所以“chmod 644 -R /home/example/public_html/dev/*”会在这些文件上产生一些错误,因为我不是所有者。我认为我的最终解决方案是对仅由我自己(用户 git)拥有的文件执行 chmod 命令,并保持密码文件完整

标签: git githooks ownership


【解决方案1】:

解决了。

我的post-receive钩子如下:

#!/bin/sh
echo "Deploying to http://dev.example.com"
GIT_WORK_TREE=/home/example/domains/example.com/public_html/dev git checkout -f
cd /home/example/domains/example.com/public_html/dev
find -type f -group 'git' -exec chmod 644 -R {} \;
find -type d -group 'git' -exec chmod 755 -R {} \;

只要不需要可写目录,这将起作用。 否则我必须将它们作为额外的 chmod 行添加到钩子脚本中

【讨论】:

    【解决方案2】:

    您应该始终推送到裸存储库,因此不存在权限问题。

    你可以有一个更新后的钩子,它将'ssh(公钥)'连接到你的 DocumentRoot 并执行 git pull。这样一来,您的推送就会立即在网络服务器上可用。

    虽然这种技术会起作用,但将内容立即拉到 DocumentRoot 可能不是一个好主意,我宁愿在 cron 中执行此操作,这样网络服务器缓存就不必在不可预测的时间间隔内刷新。

    【讨论】:

    • 我正在推动 gitolite 内的回购。 Gitolite 在用户 git 下运行。所以 post-receive 钩子也归用户 git 所有。结帐 GIT_WORK_TREE 的位置不同。文件在 /home/example/public_html/dev 中签出,但所有文件都归 git:git 而不是 example:apache 所有。
    猜你喜欢
    • 2013-04-14
    • 2013-03-29
    • 2013-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-02
    相关资源
    最近更新 更多