Не удается выполнить Git Commit в Windows / переполнение стека

я использую 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'») ;. Вы знаете, что делать сейчас?

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

введите описание изображения здесь

редактировать 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);

Важный: Обрати внимание на:

  1. кавычки и двойные кавычки (должны быть в таком порядке)
  2. escapeshellcmd
  3. Apache log очень важно знать, что происходит за сценой (и отлаживать)
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]