从当前目录下的php文件执行git commit

我试图执行这个代码,但是它什么都不做。 但是当在shell_exec中放入“git show –summary”时,它会返回git statuss。

if($_GET['action']=='add'){ $output = shell_exec('git add *'); echo "Add:<pre>$output</pre>"; } if($_GET['action']=='commit'){ $output = shell_exec('git commit -m "'.$_POST["txt"].'" '); echo "Commit:<pre>$output</pre>"; } 

从PHP提交git是否可行,以及如何?

如果命令失败, shell_exec将返回NULL 。 这几乎肯定会发生…问题是为什么。 你将无法找到使用shell_exec

我会推荐使用exec,所以你至少可以弄清楚调用的状态和错误。

http://www.php.net/manual/en/function.exec.php

这将允许你设置一些增值系统内部os调用的返回值。

 $shell_output = array(); $status = NULL; if($_GET['action']=='add'){ $output = shell_exec('git add *',$shell_output,$status); print_r($shell_output) print_r($status); } if($_GET['action']=='commit'){ $output = shell_exec('git commit -m "'.$_POST["txt"].'" ',$shell_output,$status); print_r($shell_output) print_r($status); } 

我的猜测是你有一个权限问题。 git中的commit需要对该目录的“.git”文件夹具有写入权限。

另外,请确保您在正确的目录下操作! 正在运行PHP实例的apache用户可能已经或者可能不会已经cd到正确的文件夹中。 您可能需要将cd path_to_repo && git commit添加到您的命令中,以便先移至正确的目录。 我首先用绝对路径进行调试。

只是一个建议的话…如果你正在尝试建立一个基于PHP的git客户端,你将不得不处理大量的失败案例,其中一个是显而易见的代码…试图没有新文件被修改时提交。 如果您需要关注这些情况,我鼓励您查看社区解决方案:

有一个很好的PHP的Git客户端与HTTP支持?

我推荐你在你的git commit中添加名字和电子邮件:

 $output = shell_exec('git -c user.name="www-data" -c user.email="no-replay@example.org" commit -m "'.$_POST["txt"].'" ', $shell_output, $status); 

错误可以在服务器错误文件中找到,如:/var/log/apache2/error.log

 cat /var/log/apache2/error.log