Git: gancho posterior a la recepción con git pull "No se pudo encontrar un directorio git válido"

17

Es muy extraño, pero al configurar un repositorio git y crear un gancho posterior a la recepción con:

echo "--initializing hook--"
cd ~/websites/testing
echo "--prepare update--"
git pull
echo "--update completed--"

el gancho se ejecuta de hecho, pero nunca logra ejecutar git pull correctamente:

6bfa32c..71c3d2a  master -> master
--initializing hook--
--prepare update--
fatal: Not a git repository: '.'
Failed to find a valid git directory.
--update completed--

así que ahora me pregunto, ¿cómo es posible hacer que el gancho actualice el clon con post-recepción?

en este caso el usuario que ejecuta los procesos es el mismo, y está todo dentro de la carpeta del usuario, así que realmente no entiendo ... porque si entro manualmente

cd ~/websites/testing
git pull

funciona sin ningún problema ...

cualquier ayuda en eso sería muy apreciada

Muchas gracias

zanona
fuente

Respuestas:

25

Mientras se ejecuta GIT_DIRel enlace , y (si el árbol de trabajo se definió explícitamente) GIT_WORK_TREEse establecen. Eso significa que su extracción no se ejecutará con el segundo repositorio en el directorio al que cambió.

Prueba git --git-dir ~/websites/testing/.git --work-tree ~/websites/testing pull; o desarmar el entorno repo-local de git con esto:

unset $(git rev-parse --local-env-vars)

Más información sobre estas variables de entorno en man 1 git .

Tobu
fuente
1
Muchas gracias por ese Tobu, realmente funciona, también veré más información al respecto. Saludos
zanona
6

Una cosa que experimenté fue que usar el post-updategancho '--git-dir' funcionó muy bien, pero git todavía se quejaba de la falta de un árbol de trabajo (a pesar de usar '--work-tree')

En resumen, esto no funcionó:

git --git-dir /path/to/websites/testing/.git --work-tree /path/to/websites/testing pull

mientras que esto funcionó:

cd /path/to/websites/testing
git --git-dir /path/to/websites/testing/.git pull


fuente
1

¿Esto no funciona?

cd /home/smb/websites/testing
env -i git pull

Editado

Mejor aún

cd /home/smb/websites/testing
unset GIT_DIR
git pull
tommasop
fuente
0

¿Has probado con la ruta completa en lugar de ~?

cd /home/smb/websites/testing
git pull
seda
fuente
0

Probablemente se invoque el script /bin/sh, que no comprende ~. Pruébelo con la ruta completa a en su ~lugar.

Darren Chamberlain
fuente
0

La primera respuesta recomendada es correcta: cuando se ejecuta un gancho, se establecen GIT_DIR, etc. Sin embargo, si desea poder usar el script en otro repositorio, entonces ese método es defectuoso porque codifica el restablecimiento de GIT_DIR. Como lo implicaron, la otra forma es eliminar la variable usando env de la siguiente manera: env -i git reset --hard Obviamente, el comando que ejecutas depende de ti; solo el bit 'env -i' es el bit importante .


fuente