当由apache执行时git pull不工作但在CLI上工作

时间:2016-05-25 10:45:48

标签: php git apache bitbucket

我准备了一个运行

的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!

我很困惑。

2 个答案:

答案 0 :(得分:0)

该文件夹也需要可写,因为pull实际上会写入数据。如果它是网站仓库,您可以将所有者更改为apache(并且您使用的是apache组或用户作为www root的所有者)。

答案 1 :(得分:0)

发现它!

在花了很多时间试图解决这个问题之后,我找到了答案。

SELinux就是问题所在。一个简单的命令解决了它

sudo setenforce 0

现在都在工作!