Ejecutar commands git desde el gancho post-recepción

Explicar por qué quiero hacer esto es complicado, pero lo que me gustaría hacer es equipar un repository git particular con un gancho post-recepción que haga lo siguiente:

  1. Mover a un directory de testing
  2. Clona el proyecto que acabas de actualizar.
  3. Verifica una twig específica.
  4. Haz algunas testings

El código posterior a la recepción se ve así (simplificado): permita que "repo" sea el nombre del repository de git, permita que "testdir" sea el nombre de un directory hermano, inicialmente vacío, y permita que "dev" sea el nombre de la twig .

cd ../testdir git clone --local ../repo . git checkout dev 

Sin embargo, cuando el código en el script llega a "git checkout", git responde con "fatal: no es un repository git: '.'"

No tengo idea de por qué git piensa que "testdir" no es un repository git. Si ejecuto esos commands desde una command-line (en lugar de hacerlo desde dentro de la recepción), entonces funcionan correctamente. No sé por qué el comportamiento sería diferente desde dentro de la recepción. ¿Algunas ideas?

GIT_DIR desactivar GIT_DIR en su gancho post-receive . El problema es que en el momento en que se ejecuta su script hook, GIT_DIR=. , que después de su operación de clonación y copy de CD ya no es útil.

Configuré un entorno de testing local y cuando mi script de post-receive ve así:

 #!/bin/sh cd ../testdir git clone --local ../upstream.git . git checkout dev 

Entiendo esto:

 remote: fatal: Not a git repository: '.' 

Pero si GIT_DIR variable GIT_DIR :

 #!/bin/sh unset GIT_DIR cd ../testdir git clone --local ../upstream.git . git checkout dev 

Todo funciona.