Git WebHook不会拉(PHP)

时间:2012-10-12 10:15:41

标签: php git webhooks

我有一个PHP文件hook.php,如下所示:

<?php `cd .. && git pull`;

该文件位于/var/www/oliverash.me/site/。但是,需要提取的git存储库是/var/www/oliverash.me/./site是Apache看作文档根目录的文件夹。

当我在浏览器中运行该文件时,它似乎没有拉动存储库。

我也尝试回显结果,但页面是空白的。

<?php echo `cd .. && git pull`;

4 个答案:

答案 0 :(得分:4)

我无法发表评论以回复您,但我假设您正在运行* nix系统。如果您的apache / php守护程序无权访问.git/,您将获得权限被拒绝。您可以递归更改.git/目录的所有者/组。或者做一个chmod -R o+rw .git/*给每个人(即非所有者,而不是组)访问git目录中的读写权限,这样可以清除你得到的权限错误。

修改 只是重新阅读这个问题,所以接下来可能不需要,只是为了以防万一。

尽管如此,您需要记住,有权访问您服务器的任何人都可以访问http://myurl/.git/等来访问这些服务器。因此,作为安全预防措施,我会添加一个.htaccess文件,如:

order deny, allow
deny from all

.git目录中,以便apache拒绝从Web浏览器访问其中的所有内容。

答案 1 :(得分:1)

你肯定有一个权限问题,可能是一对。

  1. php页面将以apache用户身份执行
  2. 该用户必须能够写入有问题的git仓库
  3. 该用户必须能够解决问题
  4. 您没有指定pull的来源是什么,但如果是,例如,git:或ssh:repo,那么该用户将需要perms(密钥,用户名/密码等)来访问远程做拉。来自。
  5. 刚看到它想要/var/www/.ssh - 所以你正在使用ssh:// remote,这很好,但是因为它以用户apache运行(/ var / www是用户apache的homedir),它正在寻找/var/www/.ssh中的密钥,它没有找到,因此失败了。解决方案:
    1. 使用sudo切换到有perms的用户并运行git pull作为该用户(在你的php中,执行'sudo git pull',并在/ etc / sudoers中放置一行允许用户apache运行'git pull'命令)
    2. 设置一个.ssh / config文件,指定一个Host是远程用户,一个User用于登录,一个Identity是私钥的路径遥控器将允许ssh进行拉动。

答案 2 :(得分:1)

在根目录或可以访问它的任何位置创建webhook.php

$ result = exec(“ cd / path / to / repo && git pull origin branch”);

确保权限为775,文件的用户和站点目录为www-data所有者

答案 3 :(得分:0)

此处正在执行命令的用户遇到问题。

根据您的各种评论,系统命令以名为 apache (homedir为/var/www)的用户身份执行。您可以通过在PHP脚本中运行whoami命令来验证这一点:

<?php echo `whoami`;

名为 apache 的用户通常是您的网络服务器运行的用户,然后运行PHP然后运行shell命令。

显然你想像其他一些用户那样运行命令,但到目前为止你还没有分享哪一个信息。

在正确的用户下运行shell命令,问题应该消失。

在Linux系统上,在另一个用户下运行其他命令的命令称为sudo,另一个命令su

或者,您可以使用suexec在不同于Web服务器用户的用户下执行PHP。

在任何情况下,您都需要确保拥有能够执行git命令的用户。我不知道你是如何自己测试的,我知道最好的方法是ssh进入服务器盒,手动执行git pull并收集所需的数据,如用户名,homedirectory等。