我准备了一个运行
的PHP脚本shell_exec("git pull");
每次推送到遥控器的更改都应该是git repo运行的webhook。执行后没有任何反应,我得到一个空的回复。
我将目录所有者更改为" apache" (repo被克隆为" apache")。我已经生成了一个密钥并将其上传到bitbucket。当我运行
时,它似乎正常工作# sudo -u apache git pull
它完美无缺。没有任何提示。
当我跑
时shell_exec("whoami");
我得到" apache"。
php有可能阻止git pull吗?当我运行其他git命令(比如git status)时,我得到了响应。
更新
当我做的时候
shell_exec("git pull 2>&1");
它说
error: cannot open .git/FETCH_HEAD: Permission denied
我很困惑。我确定.git dirs和subdirs所有者是apache,它有正确的权限去...
更新#2
我跑
shell_exec("git --work-tree=/path/to/repo --git-dir=/path/to/repo/.git pull 2>&1");
它仍然说
error: cannot open /path/to/repo/.git/FETCH_HEAD: Permission denied
没办法!每个人都可以阅读/path/to/repo/.git/FETCH_HEAD!
我很困惑。
答案 0 :(得分:0)
该文件夹也需要可写,因为pull实际上会写入数据。如果它是网站仓库,您可以将所有者更改为apache(并且您使用的是apache组或用户作为www root的所有者)。
答案 1 :(得分:0)
发现它!
在花了很多时间试图解决这个问题之后,我找到了答案。
SELinux就是问题所在。一个简单的命令解决了它
sudo setenforce 0
现在都在工作!