无法在Windows / PHP上进行Git提交

时间:2016-12-02 18:10:03

标签: php windows git git-commit

我正在使用Windows / PHP

通过使用PHP脚本,我想创建commit,但此操作失败。

为此,我使用以下代码:

<?
$command = "git commit -am .";
shell_exec($command);
?>

我还尝试使用chdir确保我在Git存储库目录中但它不起作用(无论如何我认为我不需要chdir。问题是另一回事。)

通常来自Windows console我使用上面相同的命令(效果很好):

> git commit -am .

另外,如果从Windows控制台执行:

> php myscript.php

它运作正常。但如果通过浏览器,我会转到网址:

http://localhost/mysite/myscript.php

然后,提交没有通过。但正如我之前所说的那样,可以从浏览器中正确读取状态。

另一方面,如果我只是通过这样做来检查status

<?
$command = "git status";
$output = shell_exec($command);
echo $output
?>

然后正确返回Git status

如何让commit通过PHP上的Windows工作?

[编辑1]

我检查了Apache错误日志,我看到每次我尝试提交时都会出现错误,说我需要指定电子邮件和名称。然后我做了(通过PHP也)。但现在我又得到了另一个错误,其中包含:致命:使用-a的路径没有意义。 (在Apache错误日志上)当我尝试通过PHP进行以下提交时:shell_exec(&#34; git commit -am&#39;我在此提交消息&#39;&#34;);.你知道现在该做什么吗?

1 个答案:

答案 0 :(得分:0)

使用git add .添加文件,并将消息作为字符串参数提供给-m

提交时间:-am

$command = 'git commit -am "php wuz here"';
$escaped_command = escapeshellcmd($command);
shell_exec($escaped_command);

编辑1

git commit -am .也适用于我,也许您只需要escapeshellcmd和单引号。我在测试它时遇到外部双引号的问题。

编辑2

Windows 7

enter image description here

编辑3

  

解决方案(由线程的作者验证。它有效!):

$command = 'git config user.name "Will Smith"';
$escaped_command = escapeshellcmd($command);
$result = shell_exec($escaped_command);

$command = 'git config user.email "myemail@gmail.com"';
$escaped_command = escapeshellcmd($command);
$result = shell_exec($escaped_command);

$command = 'git commit -am "my commit message here"';
$escaped_command = escapeshellcmd($command);
$result = shell_exec($escaped_command);

重要提示:请注意:

  1. 引号和双引号(需要按此顺序)
  2. escapeshellcmd
  3. Apache log非常重要,可以了解幕后发生的事情(和调试)