I d'abord dans votre fichier php exécuter un test contre votre instance de serveur pour obtenir les messages d'erreur de sortie à l'écran parce que exec() famille de fonctions échouent simplement en silence et ne STDOUT rapport et non STDERR:
echo shell_exec("cd /website/root/htdocs && git checkout . && git status 2>&1");
dans mon cas cela a jeté une erreur qu'il ne pouvait pas trouver la commande git en raison de l'absence de chemin binaire défini pour l'utilisateur apache. Par conséquent, un chemin complet doit être fourni au binaire de git. Il peut être obtenu en trouvant manuellement ou en cours d'exécution dans la coquille:
'which git'
est rentré (encore appelé YOU_FULL_GIT_BINARY_PATH_HERE):
/usr/local/git/bin/git
un chemin complet avec la commande git par exemple, '/ usr/local/git/bin/git status' exécute maintenant bien les commandes git.
Une autre chose est de s'assurer que l'utilisateur de votre serveur Web dispose de suffisamment d'autorisations pour lire/écrire dans votre dossier/fichiers. J'ai mis le mien à la propriété par l'utilisateur apache (Centos 6.8 d'autres versions pourraient être www: www ou www-data: www-data, etc.):
chown -R apache:apache YOUR_WEB_OR_REPO_FODLER
Afin d'assurer tous les fichiers nouvellement ajoutés héritent des autorisations correctes run:
chmod -R g+s YOUR_WEB_OR_REPO_FODLER
Ce qui précède devrait obtenir que votre script exécute des commandes maintenant. Bien qu'il ne surmonte pas l'invite de mot de passe git pour utiliser la commande 'git pull' pour un utilisateur git défini dans votre fichier YOUR_WEB_OR_REPO_FODLER/.git/config.Exécution de commande ci-dessous à l'intérieur repo:
git config credential.helper store
command vous demandera le mot de passe et vous permettent de stocker localement. Veuillez noter que votre mot de passe stocké ne sera pas crypté et protégé uniquement par le système de fichiers, par ex. dans /root/.git-credentials. Cela permettra de lancer 'git pull' sans demander de mot de passe. Il n'est pas idéal pour mon environnement d'intégration continue entièrement automatisé de déployer des tests VPS à la demande, car il faut saisir manuellement au moins une fois l'utilisateur git (défini dans le fichier .git/config git).
Depuis mon environnement doit toujours fonctionner sur le code d'origine de la télécommande/la copie maître Je suis également en cours d'exécution
/YOU_FULL_GIT_BINARY_PATH_HERE/git checkout .
avant d'appeler « git pull » pour assurer les changements locaux sont perdus à jamais alternativement faire un redémarrage à froid au lieu d'utiliser :
/YOU_FULL_GIT_BINARY_PATH_HERE/git fetch origin
/YOU_FULL_GIT_BINARY_PATH_HERE/git reset --hard origin/master
Qu'est-ce que shell_exec renvoyant? –
rien. aucune erreur @JonStirling –
Rien? Comme dans le retour de «null»? –