я использую Windows
/ PHP
,
Используя PHP
Сценарий, который я хочу сделать commit
но эта операция не удалась.
Для этого я использую следующий код:
<?
$command = "git commit -am .";
shell_exec($command);
?>
Я также пытался использовать chdir
чтобы быть уверенным, что я нахожусь в каталоге репозитория Git, но он не работает (в любом случае, я думаю, что мне не нужно chdir
, Проблема это другое дело).
Обычно из Windows console
Я использую ту же команду выше (которая работает отлично):
> git commit -am .
Также, если из консоли Windows я делаю:
> php myscript.php
это работает правильно. Но если через браузер я захожу на URL:
http://localhost/mysite/myscript.php
Тогда коммит не проходит. Но, как я уже говорил, статус читается правильно из браузера.
С другой стороны, если я просто проверю status
при выполнении:
<?
$command = "git status";
$output = shell_exec($command);
echo $output
?>
Тогда Git status
возвращается правильно.
Любая идея о том, как сделать commit
работает через PHP
на Windows
?
[РЕДАКТИРОВАТЬ 1]
Я проверил журнал ошибок Apache и увидел, что каждый раз, когда я пытался сделать коммит, возникала ошибка, говорящая о том, что мне нужно указать адрес электронной почты и имя. Затем я сделал это (через PHP тоже). Но теперь я получаю еще одну ошибку, которая говорит: fatal: Пути с -a не имеют смысла. (в журнале ошибок Apache), когда я пытаюсь сделать следующий коммит через PHP: shell_exec («git commit -am ‘my commit message here'») ;. Вы знаете, что делать сейчас?
Добавьте файлы с 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
редактировать 3
Решение (подтверждено автором темы. Работает!):
$command = 'git config user.name "Will Smith"';
$escaped_command = escapeshellcmd($command);
$result = shell_exec($escaped_command);
$command = 'git config user.email "[email protected]"';
$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);
Важный: Обрати внимание на:
escapeshellcmd
Apache log
очень важно знать, что происходит за сценой (и отлаживать)Других решений пока нет …