2

我已按照此站点上列出的示例远程将我的文件添加到我的服务器,但是,我希望拥有nginx:nginxuser:group 拥有的所有文件,以便在推送文件后我可以从浏览器访问文件。

我该如何修改post-receive钩子,以便nginx:nginx成为推送到远程“ubuntu”服务器的文件/文件夹的所有者?

我尝试了以下post-receive钩子,但是,如果正在修改文件,我会收到错误:remote: error: unable to unlink old 'index.html' (Permission denied),这里的 shell 脚本:

#!/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

提前感谢您的帮助!

4

1 回答 1

0

这通常是进程未释放这些文件(阻止 git checkout 完成其工作)的结果,如“ Git Checkout 警告:无法取消链接文件,权限被拒绝”中所述。

但这也可能是您的sudo命令成功运行一次的结果,使您的挂钩的任何未来执行失败,因为它不再有权以 ' git' 用户的身份签出。

如果是这种情况,你的钩子应该sudo作为nginx:nginx你当前的 git 命令,而不是chown最终结果(网络工作树)。


OP确认:

post-receive我现在拥有的 git 钩子中exec sudo -u nginx -g nginx ~/test.shtest.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”,如“在许多帐户中使用不带 Sudo 的 Git ”。

这似乎解决了这个问题:

我根据shared=true提到的帖子将配置设置为,它现在似乎正在工作。

于 2012-09-22T20:07:40.390 回答