Ejecutar git commit desde el file php en el directory actual

Intento ejecutar este código, pero no hace nada. Pero cuando se pone "git show –summary" en shell_exec, devuelve git statuss.

if($_GET['action']=='add'){ $output = shell_exec('git add *'); echo "Add:<pre>$output</pre>"; } if($_GET['action']=='commit'){ $output = shell_exec('git commit -m "'.$_POST["txt"].'" '); echo "Commit:<pre>$output</pre>"; } 

¿Es posible comprometer git de php, y cómo?

shell_exec va a devolver NULL si el command falla. Esto casi seguro está sucediendo … la pregunta es por qué. No vas a poder averiguar usando shell_exec .

Yo recomendaría en su lugar usar exec, para que al less pueda averiguar el estado de la llamada y lo que está pasando mal.

http://www.php.net/manual/en/function.exec.php

Esto le permitirá configurar algunos valores que se completarán con los valores de retorno de la llamada al sistema interno del sistema.

 $shell_output = array(); $status = NULL; if($_GET['action']=='add'){ $output = shell_exec('git add *',$shell_output,$status); print_r($shell_output) print_r($status); } if($_GET['action']=='commit'){ $output = shell_exec('git commit -m "'.$_POST["txt"].'" ',$shell_output,$status); print_r($shell_output) print_r($status); } 

Supongo que tienes un problema con los permissions. Una commit en git requiere permiso de escritura en la carpeta '.git' de ese directory.

Además, ¡asegúrese de estar operando en el directory correcto! El usuario de apache que ejecuta la instancia de PHP puede o no estar ya en la carpeta correcta donde está el repository. Es posible que deba agregar un cd path_to_repo && git commit a su command para moverse primero al directory correcto. Primero debo depurar esto con routes absolutas.

Solo un consejo: si intentas configurar un cliente git basado en PHP, vas a tener que manejar una tonelada de casos fallados, uno de los cuales es evidente en este código … intentar un confirmar cuando no se hayan modificado los files nuevos. Lo invito a search soluciones comunitarias si necesita preocuparse por estos casos:

¿Hay un buen cliente de php git con soporte http?

Te recomiendo que agregues el nombre y el correo electrónico en tu confirmación de git:

 $output = shell_exec('git -c user.name="www-data" -c user.email="no-replay@example.org" commit -m "'.$_POST["txt"].'" ', $shell_output, $status); 

Los errores se pueden encontrar en el file de error del server, por ejemplo: /var/log/apache2/error.log

 cat /var/log/apache2/error.log