it-swarm.com.ru

Выполнение команд git через PHP

Как команды 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>";
?>
13
rjv

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

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

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

7
Oli

Существует еще одно решение, которое заключается в простом использовании 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
Tim Hallman

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

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

  • создать пары ключей ssh, используя ssh-keygen
  • загрузить открытый ключ на ваш удаленный хост git
  • настроить ~/.ssh/файл конфигурации, чтобы добавить команду использовать этот сгенерированный закрытый ключ от 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 для запуска команд git

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

    exec("/bin/bash /var/www/git-pull.sh");
    
1
Raaghu

Сначала я запускаю тест для моего экземпляра сервера 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. Выполнение команды ниже в git repo:

git config credential.helper store

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

Все мои папки были настроены на владение пользователем Apache (другие версии Centos 6.8 могут быть www-data: www-data и т.д.):

chown -R Apache:apache YOUR_WEB_FODLER

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

0
webcoder.eu