Я хочу отправить папку с данными в пустой репозиторий в atlasian Git stash. Репозиторий создается через остальные API. Удаленное происхождение установлено. Когда я вхожу
$ git push origin master
в оболочке все отлично работает. Когда я использую интерактивную оболочку PHP и введите
exec('git push origin master');
это также работает. Но когда код вызывается в моем PHP-файле, ничего не происходит. Конечно код тот же. Я нахожусь в правильном рабочем каталоге (я меняю его chdir()
перед shell_exec
). Об ошибках не сообщается (даже если для error_reporting установлено значение E_ALL
) и когда я устанавливаю выходной аргумент в exec()
Я получаю пустой массив.
Кто-нибудь может помочь?
Когда вы выполняете код в интерактивном режиме или команды через оболочку, вы выполняете под своей учетной записью пользователя и средой оболочки.
Я предполагаю, что причина, по которой это не работает, заключается в том, что вы выполняете скрипт PHP от имени другого пользователя (и, возможно, вам не хватает конфигурации окружения ssh / git).
Для того, чтобы лучше ответить на ваш вопрос, требуется больше информации, но вы можете начать с проверки пользователя, с которым вы выполняете ваш PHP-файл, который также может выполнить git push origin master
делая что-то вроде:
sudo su -s /bin/bash -c "cd /my/git/repo/dir; git push origin master" MYPHPEXECUTEUSER
Я узнал, что я должен добавить ‘2>&1 ‘до конца команды оболочки, чтобы получить сообщение об ошибке при использовании shell_exec (). Он возвратил «fatal: не удалось прочитать пароль для« url »: устройство не настроено». Мне просто нужно было добавить пароль к URL-адресу в режиме http. Теперь все работает нормально. Спасибо за ответы 🙂