Esecuzione di comandi git tramite PHP

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

  • creare una coppia di chiavi ssh, usando ssh-keygen
  • carica la chiave pubblica per il tuo host remoto git
  • 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.