Com'è ansible git add .
comandi come git add .
e git commit -m
essere eseguito usando php?
È per un progetto che crea una struttura di repository centralizzata per il mantenimento di progetti accademici.
exec () non sembra funzionare.
<?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>"; ?>
È sicuramente ansible. L'ho implementato in uno dei miei progetti. Tuttavia dovresti fare attenzione alle autorizzazioni.
Su Linux, di solito, il command exec
verrà eseguito usando l'utente www-data
. Quindi dovresti permettere a www-data
di scrivere e leggere nella tua cartella di lavoro.
Un modo veloce e sporco per farlo è: chmod o+rw -R git_directory
Ho trovato una soluzione piuttosto semplice a 2 problemi qui
1) Git pull da un telecommand sicuro senza usare la password
ssh-keygen
configura ~ / .ssh / config file per aggiungere istruzioni per usare questa chiave privata generata da git
host gitlab.com HostName gitlab.com IdentityFile ~/.ssh/private_key User git
Questo è tutto ora qualsiasi command git userà questo private_key per connettersi al remoto
2) Esecuzione del command git da utente www-data
aggiornare il file sudoers per consentire all'utente di www-data di eseguire comandi git, per modificare eseguire il command seguente
$ sudo visudo
aggiungere la seguente linea sotto le preferenze dell'utente
www-data ALL=(raaghu) NOPASSWD: /usr/bin/git
che significa utente www-data
di ALL
terminali che agiscono come raaghu
può eseguire /usr/bin/git
con NOPASSWD
Nota: non provare questo metodo se non si capisce il file sudoers, altrimenti ciò potrebbe creare problemi di sicurezza
Creare il file git-pull.sh per eseguire i comandi git
cd /var/www/my-repo sudo -u raaghu git pull origin
esegui questo file git-pull.sh da php
exec("/bin/bash /var/www/git-pull.sh");
C'è un'altra soluzione, che è semplicemente utilizzare gli apici di php in questo modo
$message = `git log -1 --pretty=%B`; // get commit message
o
$deploy_tag = `git describe --tags`; // get commit tags
o
$hash = `git log -1 --pretty=%h`; // get the hash
Per prima cosa eseguo un test sull'istanza del mio server bitbucket per far sì che i messaggi di errore vengano visualizzati sullo schermo:
echo shell_exec("cd /website/root/htdocs && git status 2>&1");
questo ha gettato un errore che non è stato in grado di trovare il command git e quindi ha dovuto fornire un path completo per il binario di git:
'which git'
restituito (ulteriormente chiamato YOU_FULL_GIT_BINARY_PATH_HERE):
/usr/local/git/bin/git
Un path completo, ad es. '/ Usr / local / git / bin / git status' ora esegue correttamente i comandi git.
Questo non supera la password git richiesta per usare il command 'git pull' per un set in .git / config git user. Esecuzione sotto il command in git repo:
git config credential.helper store
[command] [1] chiederà la password e consentirà di archiviarla in locale non crittografata (protetta solo dal file system, ad esempio in /root/.git-credentials). Ciò consentirà di eseguire 'git pull' senza richiedere la password. In alternativa (probabilmente meglio) è quello di generare le chiavi ssh per il tuo server web come ad esempio aggiunto e poi aggiungerle al tuo account utente dedicato bitbucket o chiavi repo.
Tutte le mie cartelle sono state impostate per essere di properties; dell'utente apache (Centos 6.8 altre versioni potrebbero essere www-data: www-data ecc.):
chown -R apache:apache YOUR_WEB_FODLER
Non ho dovuto usare il trucco sporco 'chmod o + rw -R' per far funzionare tutto.