shell_exec и git pull - PullRequest
       14

shell_exec и git pull

1 голос
/ 28 февраля 2011

Я надеялся, что кто-то может помочь, у меня есть страница PHP, которая использует shell_exec, чтобы заархивировать каталог и запустить git pull, чтобы сбить недавние изменения в репозитории.

$op = shell_exec("cd /home/user/git/$repo/$dir/; zip -r /home/user/archives/$dir.$datestamp.zip $dir; cd /home/user/git/$repo/$dir/; git pull");

почтовый индекс работает отлично. Если я изменю git pull, например, git log или git status - в моем shell_exec, это также работает, и я вижу файл журнала.

Просто не похоже на git pull.

Я видел другой подобный пост, но не был уверен, как это было достигнуто >> Shell_exec с git pull?

1 Ответ

4 голосов
/ 28 февраля 2011

Из вашего описания в комментариях кажется, что проблема в том, что ваш apache пользователь не может писать в репозиторий, что явно требуется при использовании git pull.У вас есть два варианта действий:

  1. Настройка Apache для запуска сценария от имени другого пользователя (например, с помощью suEXEC либо в VirtualHost или через userdir )
  2. Измените разрешения для вашего репозитория, чтобы пользователь apache мог писать в него

Вам следует тщательно продумать последствия безопасности для любого из этих вариантов, но второй вариант, вероятно, самый простой,Если у вас еще нет такой группы, вы можете создать ее с помощью:

addgroup gitwriters

... и затем добавить себя и пользователя Apache в эту группу:

adduser [yourusername] gitwriters
adduser apache gitwriters

Затем вы можете следовать инструкциям в другой вопрос , чтобы изменить права доступа к хранилищу.Чтобы повторить те с некоторыми небольшими изменениями:

# Recursively, set the group ownership of every file and directory of your repository:
chgrp -R gitwriters /path/to/your/repo

# Recursively, make every file and directory of your repository readable and writable
# by the group:
chmod -R g+rw /path/to/your/repo

# Recursively, set the setgid of every directory in the repository.  The setgid bit
# on directories means that files created in the directory will have the same group
# ownership as the directory.  
find /path/to/your/repo -type d -print0 | xargs -0 chmod g+s

Тогда, надеюсь, ваш git pull должен работать.

...