Выполнение команд git через PHP - PullRequest
14 голосов
/ 19 декабря 2011

Как команды git, такие как git add . и git commit -m, могут быть выполнены с использованием php?

Это для проекта, который создает централизованное хранилище для поддержки академических проектов.

exec () не похоже на работу.

<?php
$path = "/var/www/repos/$_POST[project]"; 
$a='';
chdir($path);
exec("git add .");  
exec("git commit -m'message'");
echo "<h3 align = center> Succesfully commited all the files.</h3>";
?>

Ответы [ 4 ]

7 голосов
/ 19 декабря 2011

Это определенно возможно. Я реализовал это в одном из моих проектов. Однако вы должны быть осторожны с разрешениями.

В linux обычно команда exec выполняется с использованием пользователя www-data. Поэтому вы должны разрешить www-data писать и читать в вашем рабочем каталоге.

Один быстрый и грязный способ сделать это: chmod o+rw -R git_directory

2 голосов
/ 29 ноября 2016

Существует еще одно решение, которое заключается в простом использовании php backticks, например, так:

$message = `git log -1 --pretty=%B`; // get commit message

или

$deploy_tag = `git describe --tags`; // get commit tags

или

$hash = `git log -1 --pretty=%h`; // get the hash
1 голос
/ 23 июня 2017

Я нашел довольно простые решения 2 проблем здесь

1) Git pull с защищенного пульта без использования пароля

  • создать пару ключей ssh, используя ssh-keygen
  • загрузить открытый ключ на удаленный хост ur git
  • configure ~ / .ssh / config file для добавления инструкции по использованию этого сгенерированного закрытого ключа с помощью git

    host gitlab.com
     HostName gitlab.com
     IdentityFile ~/.ssh/private_key
     User git
    

    Это все, что теперь любая команда git будет использовать этот private_key для подключения к удаленному

2) Запуск команды git от пользователя www-data

  • обновить файл sudoers, чтобы позволить пользователю www-data запускать команды git, редактировать и запускать следующую команду

    $ sudo visudo
    

    добавить следующую строку под предпочтениями пользователя

    www-data    ALL=(raaghu) NOPASSWD: /usr/bin/git
    

    означает www-data пользователь из ALL терминалов, действующих как raaghu может работать /usr/bin/git с NOPASSWD

    Обратите внимание: не пытайтесь использовать этот метод, если вы непонять файл sudoers, иначе это может создать дыру в безопасности

  • Создать git-pull.sh fиль для запуска команд git

    cd /var/www/my-repo
    sudo -u raaghu git pull origin
    
  • запустите этот файл git-pull.sh из php

    exec("/bin/bash /var/www/git-pull.sh");
    
0 голосов
/ 30 апреля 2017

Сначала я запускаю тест на своем экземпляре сервера bitbucket, чтобы получить какие-либо сообщения об ошибках, выводимые на экран:

echo shell_exec("cd /website/root/htdocs && git status 2>&1");

При этом выдается ошибка, из-за которой не удается найти команду git, поэтому необходимо указать полный путь кДвоичный файл git:

'which git'

возвращен (далее называемый YOU_FULL_GIT_BINARY_PATH_HERE):

/usr/local/git/bin/git

Полный путь, например, '/ usr / local / git / bin / git status' теперь хорошо выполняет команды git.

Это не преодолевает пароль git, необходимый для использования команды 'git pull' для набора в .git / config git user.Выполнение команды ниже в git repo:

git config credential.helper store

[команда] [1] запросит пароль и позволит вам сохранить его локально незашифрованным (защищено только файловой системой, например, в /root/.git-credentials).Это позволит запускать «git pull» без запроса пароля.В качестве альтернативы (возможно, лучше) генерировать ssh-ключи для вашего веб-сервера, такие как apached, а затем добавлять их в свою специализированную учетную запись пользователя bitbucket или ключи репо.

Все мои папки установлены как принадлежащие пользователю apache (Centos6.8 другие версии могут быть www-data: www-data и т. Д.):

chown -R apache:apache YOUR_WEB_FODLER

Мне не пришлось использовать подвох «chmod o + rw -R», чтобы заставить все работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...