Подтвердить что ты не робот

Выполнение команд 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>";
?>
4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

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

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

    Теперь все команды Git будут использовать эту private_key для подключения к удаленному

2) Выполнение команды Git пользователя www-data​​strong >

  • обновить файл 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");
    

Ответ 3

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

$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

Ответ 4

Сначала я запускаю тест против моего экземпляра сервера 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, затем добавить их в свои пользовательские аккаунты или файлы repo.

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

chown -R apache:apache YOUR_WEB_FODLER

Мне не нужно было использовать грязный трюк "chmod o + rw -R", чтобы все работало.