进行由www数据所有的git部署

进行由www数据所有的git部署,git,apache,deployment,permissions,debian,Git,Apache,Deployment,Permissions,Debian,我的post-receivehook部署到我的Apache虚拟主机所指向的/home/repo。 我希望/home/repo归www-data所有 我是否应该将git添加到/etc/sudoers中,并允许它在每次推送后执行一个自定义脚本,使chown-R www-data:www-data/home/repo成为rootgit似乎不能像他自己那样做。但是看起来很不安全 编辑: post receive正在git用户下执行git签出-f和chmod-R 750/home/repo。我只是离开了g

我的
post-receive
hook部署到我的Apache虚拟主机所指向的
/home/repo
。 我希望
/home/repo
www-data
所有

我是否应该将
git
添加到
/etc/sudoers
中,并允许它在每次推送后执行一个自定义脚本,使
chown-R www-data:www-data/home/repo
成为
root
git
似乎不能像他自己那样做。但是看起来很不安全

编辑
post receive
正在
git
用户下执行
git签出-f
chmod-R 750/home/repo
。我只是离开了git
own
/home/repo
,并将
www-data
(或任何Apache用户)添加到
git
组中,这样它就可以阅读了。

很有趣。你为什么关心用户所有权?一般来说,设置一些灵活的组权限并将Apache用户添加到您的
git
组应该足够了。除此之外,我真的建议您查看部署。

用户
git
属于组
www-data
www-data
属于组
git
。不过,许可问题仍然存在。当我推送一个空的
index.html
文件时,它被正确部署,但是Apache在通过我的浏览器访问时返回一个
403禁止的
错误。似乎正在使用
chmod 700
推送文件,因此组无法读取该文件。这就是为什么我首先要将所有者更改为
www-data
。是的,但是您正在以所有者身份推送,并且可以从内部调整组权限
post-receive
hook,不是吗?我正在以用户身份推送
git
。示例:我在本地执行了一个
touch perm.html
,即(本地)
-rw-r--r--
,然后
git add perm.html&&git commit-m“Added perm.html”&&git push origin master
。在服务器上,它显示为
-rw------
。我不明白为什么。你有什么建议吗?理想的情况下,我会建议或类似的建议。但是对于一个快速的“脏”解决方案,您只需将
chmod-R 750/home/repo
添加到您的
post receive
钩子中,该钩子由
git
用户运行,该用户碰巧也是
/home/repo
文件夹的所有者,因此他在调整权限时应该不会有任何问题。让我知道我对您的设置是否有正确的想法。在将
www-data
添加到
git
组后,我忘记重新启动Apache,这就是为什么我得到了
403禁止的
。否则效果会很好。非常感谢。