shell_exec («мастер git push origin») не будет работать

Я хочу отправить папку с данными в пустой репозиторий в atlasian Git stash. Репозиторий создается через остальные API. Удаленное происхождение установлено. Когда я вхожу

$ git push origin master

в оболочке все отлично работает. Когда я использую интерактивную оболочку PHP и введите

exec('git push origin master');

это также работает. Но когда код вызывается в моем PHP-файле, ничего не происходит. Конечно код тот же. Я нахожусь в правильном рабочем каталоге (я меняю его chdir() перед shell_exec). Об ошибках не сообщается (даже если для error_reporting установлено значение E_ALL) и когда я устанавливаю выходной аргумент в exec() Я получаю пустой массив.

Кто-нибудь может помочь?

0

Решение

Когда вы выполняете код в интерактивном режиме или команды через оболочку, вы выполняете под своей учетной записью пользователя и средой оболочки.

Я предполагаю, что причина, по которой это не работает, заключается в том, что вы выполняете скрипт PHP от имени другого пользователя (и, возможно, вам не хватает конфигурации окружения ssh / git).

Для того, чтобы лучше ответить на ваш вопрос, требуется больше информации, но вы можете начать с проверки пользователя, с которым вы выполняете ваш PHP-файл, который также может выполнить git push origin master делая что-то вроде:

sudo su -s /bin/bash -c "cd /my/git/repo/dir; git push origin master" MYPHPEXECUTEUSER

1

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

Я узнал, что я должен добавить ‘2>&1 ‘до конца команды оболочки, чтобы получить сообщение об ошибке при использовании shell_exec (). Он возвратил «fatal: не удалось прочитать пароль для« url »: устройство не настроено». Мне просто нужно было добавить пароль к URL-адресу в режиме http. Теперь все работает нормально. Спасибо за ответы 🙂

0