shell_exec和git pull

时间:2011-02-28 15:37:31

标签: php git shell-exec git-pull

我希望有人可以提供帮助,我有一个PHP页面,它使用shell_exec压缩目录并运行git pull以降低最近的存储库更改。

$op = shell_exec("cd /home/user/git/$repo/$dir/; zip -r /home/user/archives/$dir.$datestamp.zip $dir; cd /home/user/git/$repo/$dir/; git pull");

拉链工作正常。如果我在我的shell_exec中将git pull更改为例如git loggit status,这也可以,我可以看到日志文件。

似乎并不喜欢git pull。

我看到了另一个类似的帖子,但不确定它是如何实现的>> Shell_exec with git pull?

1 个答案:

答案 0 :(得分:4)

根据您在评论中的说明,问题似乎是您的apache用户无法写入存储库,这在使用git pull时显然是必需的。你有两个行动方案:

  1. 设置Apache以另一个用户身份运行脚本(例如suEXEC使用on a VirtualHost or via userdir
  2. 更改存储库的权限,以便apache用户可以写入
  3. 你应该仔细考虑任何一种选择的安全含义,但第二种选择可能是最简单的。如果您还没有这样的组,可以使用以下命令创建它:

    addgroup gitwriters
    

    ...然后将自己和Apache用户添加到该组:

    adduser [yourusername] gitwriters
    adduser apache gitwriters
    

    然后,您可以按照another question中的说明更改存储库的权限。重申一些略有不同的内容:

    # Recursively, set the group ownership of every file and directory of your repository:
    chgrp -R gitwriters /path/to/your/repo
    
    # Recursively, make every file and directory of your repository readable and writable
    # by the group:
    chmod -R g+rw /path/to/your/repo
    
    # Recursively, set the setgid of every directory in the repository.  The setgid bit
    # on directories means that files created in the directory will have the same group
    # ownership as the directory.  
    find /path/to/your/repo -type d -print0 | xargs -0 chmod g+s
    

    然后希望您的git pull能够正常运作。