我在远程添加我的文件到我的服务器中遵循了这个用户列出的示例,但是,我希望所有文件都归nginx:nginx
site:组所有,这样我就可以在推送文件后从浏览器访问这些文件。
如何修改post-receive
钩子,使nginx:nginx
成为推送到远程'ubuntu`‘服务器的文件/文件夹的所有者?
我已经尝试了下面的外壳钩子,但是,如果文件正在被修改,我会收到错误:remote: error: unable to unlink old 'index.html' (Permission denied)
,post-receive
脚本:
#!/bin/sh
GIT_WORK_TREE=/var/www/www.foo.com/htdocs
export GIT_WORK_TREE
git checkout -f
exec sudo chown -R nginx:nginx $GIT_WORK_TREE
感谢advance的帮助!
发布于 2012-09-22 20:07:40
这通常是由于进程没有释放这些文件(阻止git签出完成其工作)造成的,如"Git Checkout warning: unable to unlink files, permission denied“中所述。
但也可能是因为您的sudo
命令成功工作过一次,导致您的钩子以后的任何执行都失败,因为它不再具有以'git
‘用户的身份签出的权限。
如果是这样的话,你的钩子应该sudo
as nginx:nginx
你当前的git命令,而不是chown
最终结果( web工作树)。
操作员确认:
git post-receive
钩子中的
现在有了
exec sudo -u nginx -g nginx ~/test.sh
(test.sh
包含了上面的GIT_WORK_TREE
内容)。
然而,我得到了另一个权限错误:remote: fatal: Unable to create '/home/ubuntu/foo.git/index.lock': Permission denied
。
运行完~/test.sh
后,我需要返回ubuntu:ubuntu
吗?
我建议:
将你的repo声明为"
shared by all
“,就像"Using Git without Sudo in many accounts”一样。
这似乎解决了问题:
根据前面提到的内容,我将
的配置设置为
shared=true
,现在似乎可以正常工作了。
https://stackoverflow.com/questions/12545747
复制