Я разрабатываю приложение, которое имеет слой поверх git, который позволил бы мне выполнять коммиты из веб-браузера вместо того, чтобы переходить в CLI. Git-репо будет на моем собственном сервере. Часть процесса мерзавца git push origin master
, но у этого есть запрос пароля.
Exec-код
private function run($command, array $arguments = array()) {
$pipes = array();
$descriptorspec = array(
array('pipe', 'r'), // STDIN
array('pipe', 'w'), // STDOUT
array('file', 'temp/error.txt', 'w'), // STDERR
);
$process = proc_open($command, $descriptorspec, $pipes);
foreach ($arguments as $arg) {
// Write each of the supplied arguments to STDIN
fwrite($pipes[0], (preg_match("/\n(:?\s+)?$/", $arg) ? $arg : "{$arg}\n"));
}
$response = stream_get_contents($pipes[1]);
// Make sure that each pipe is closed to prevent a lockout
foreach ($pipes as $pipe) {
fclose($pipe);
}
proc_close($process);
return $response;
}
и я бы назвал функцию, используя
$git->run('git push origin master', array('username', 'password'));
Выполнение вышеуказанного абсолютно ничего не делает.
Во время отладки вышеуказанного кода я запустил php -i
и получил некоторые возвращенные данные. Я тогда побежал aasdashdlashdkashdl
то есть сценарий, который я знаю, не существует, и все равно ничего не возвращается и тоже не выводится сообщение об ошибке. Бег git status
использование этой функции возвращает вывод, тогда как git add .
ничего не возвращает и ничего не делает с git repo.
Что я делаю неправильно? Могу ли я вместо этого использовать сертификаты (но тогда у вас есть проблема с самозаверяющим сертификатом, и я могу разрабатывать не только на своем персональном компьютере, но и на других)?
NB
Я стараюсь оставаться как можно более «ванильным», и мне не нужно добавлять пакеты, хотя я готов, если нет другого решения.
Задача ещё не решена.
Других решений пока нет …