Eu preciso de um script PHP para executar, git pull
mas não sou ingênuo o suficiente para conceder permissões git
. Eu envolvi git pull
um script que www-data
possui permissões para, mas não sei como atribuir permissões ao script git
:
$ sudo tail -n1 /etc/sudoers
www-data ALL=(ALL) NOPASSWD: /home/php-scripts/git-pull
$ cat /home/php-scripts/git-pull
#!/bin/bash
/usr/bin/git pull
$ ls -la /home | grep php-scripts
drwxr-xr-x 2 ubuntu ubuntu 4096 Sep 3 09:26 php-scripts
$ ls -la /home/php-scripts/git-pull
-rwxrwxr-x 1 ubuntu ubuntu 30 Sep 3 08:44 /home/php-scripts/git-pull
$ cat /var/www/public_html/git-wrapper.php
<?php
$output = array();
$value = 0;
exec("/home/php-scripts/git-pull", $output, $value);
echo "<pre>";
echo "Return Value: {$value}\n";
foreach ( $output as $o) {
echo $o."\n";
}
?>
Note que /var/www/public_html/
é de fato um repositório git. Costumo executar git pull
nesse diretório a partir da CLI. No entanto, quando chamo esse script em um navegador da Web, vejo que os arquivos não foram atualizados via git pull
e o seguinte é enviado para o navegador:
Return Value: 1
Este é no Ubuntu Server 12.04 com Git 1.7.9.5. O repositório remoto está no mesmo servidor.
permissions
sudo
php
git
dotancohen
fonte
fonte
/usr/bin/git pull >/tmp/git.log 2>&1
e ver o que o erroRespostas:
Seu script é executado em
www-data:www-data
Suponho. Você deve executar ogit pull
com um usuário que tenha permissão de gravação no seu repositório clonado. Você configurousudo
, mas não o chama em nenhum lugar que não faça muito sentido (sem dizer que você precisa fazer isso). Verifique sob qual usuário você está executando e, em seguida, mude para o apropriado, se necessário, e ajuste as permissões no seu repositório clonado de acordo.fonte