1

我希望有人能提供帮助,我有一个 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");

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

只是似乎不喜欢 git pull。

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

4

1 回答 1

4

从您在评论中的描述看来,问题在于您的apache用户无法写入存储库,这在您使用git pull. 你有两个行动方案:

  1. 设置 Apache 以作为另一个用户运行脚本(例如,在 VirtualHost 上或通过 userdir使用suEXEC
  2. 更改存储库的权限,以便apache用户可以写入它

您应该仔细考虑这两种选择的安全隐患,但第二种选择可能是最简单的。如果您还没有这样的组,您可以使用以下命令创建它:

addgroup gitwriters

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

adduser [yourusername] gitwriters
adduser apache gitwriters

然后您可以按照另一个问题中的说明更改存储库的权限。重申那些有一些细微变化的:

# 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应该工作。

于 2011-02-28T20:25:14.973 回答