Github push с веб-сервера PHP с помощью обратных ключей shell_exec ()

263
Vince

У меня есть Github-репозиторий, который я использую через Atom.io с клиентом, чтобы обеспечить синхронизацию всех изменений для их веб-сайта. Репозиторий GitHub содержит веб-крючок, который автоматически передает все наши изменения на действующий веб-сайт, но я хочу использовать PHP, чтобы перенести изменения, сделанные непосредственно на веб-сервере, обратно в репо. То есть: резервное копирование файлов журнала, загрузка изображений и быстрые изменения, которые были сделаны непосредственно на сервере.

Если произойдет одно из этих изменений на сервере, мои сценарии сообщат мне об этом без проблем.

git status  # On branch master # Changes to be committed: # (use "git reset HEAD ..." to unstage) # # new file: somefolder/somenewfile.whatever # 

Если я делаю это из командной строки, все автоматически синхронизируется:

git add --all git commit -m "from server" git push -u origin master 

Но если я попытаюсь сделать это через обратную галочку PHP shell_exec (), то ` `ничего не произойдет. Я даже попытался добавить паузы.

$output = `git add --all`; echo $output; sleep(1);  $output = `git commit -m "from server"`; echo $output; sleep(3);  $output = `git push -u origin master`; echo $output; sleep(3); 

Кто-нибудь знает, что я здесь делаю не так? Должен ли я помещать эти вызовы в скрипт bash, а затем вызывать его через шаблон PHP?

1
В вашей первой строке `output` отсутствует закрывающая черта после команды. Это опечатка при копировании здесь или она действительно отсутствует в вашем скрипте? Mokubai 5 лет назад 1
Является ли текущий рабочий каталог скрипта PHP правильным? Attie 5 лет назад 0
Также не очень хорошая идея помещать большие / двоичные файлы (файлы журналов и изображения) в репозиторий git любого существенного масштаба ... возможно, загляните в Git LFS. Attie 5 лет назад 0
@Mokubai, это была просто опечатка, я обновил мой пример выше. Vince 5 лет назад 0
@ Внимание, скрипт PHP работает корректно во всех других отношениях, даже простые вызовы git, такие как git status, работают отлично. Проблема в том, что когда он пытается вызвать git commit -m "с сервера", я просто не вижу вывода, чтобы определить, работает ли он вообще. Vince 5 лет назад 0
Как насчет кода возврата / статуса выхода? (если вы можете получить это ...) Attie 5 лет назад 0
@ Atttie после того, как push-вызов выполнен, я всегда получаю это возвращаемое «Мастер ветвления настроен для отслеживания удаленного мастера веток от источника». Когда я выполняю все шаги вручную в командной строке, все работает отлично, но я пытаюсь сделать это из шаблона PHP, он никогда не выдвигается, хотя я получаю одинаковый ответ в обоих случаях. Vince 5 лет назад 0

0 ответов на вопрос