2012-03-28 15 views
9

Tengo el siguiente problema. He puesto al día el 'post-recepción' en un CD en un directorio determinado y luego tirar de la cesión temporal de desplegarlo, así:git post-receive no funciona correctamente

#!/bin/bash 
cd /var/www/site 
git pull origin master 

Sin embargo cada vez que hago 'git principal origen empuje' en mi máquina local consigo lo siguiente:

Counting objects: 5, done. 
Delta compression using up to 2 threads. 
(etc..) 
remote: fatal: Not a git repository: '.' 

Sin embargo, cuando el CD manualmente a /var/www/site y hacer git pull origin master que funciona muy bien.

Respuesta

14

Uso desarmar GIT_DIR de la siguiente manera

#!/bin/bash 
cd /var/www/site || exit 
unset GIT_DIR 
git pull origin master 
exec git-update-server-info 

Se puede ver más información sobre GIT_DIR aquí. Git Loves the Environment

+0

brillante, justo lo que necesitaba. ¿Te importa explicar por qué esto debe hacerse? – andy

+2

'GIT_DIR' es una de las pocas variables de entorno que puede establecer para varios comandos de git. En un gancho posterior a la recepción, '$ GIT_DIR' siempre está (?) Establecido en' .'. Si 'cd' en otro lugar,' git pull' aún ve '$ GIT_DIR' establecido en' .' y espera encontrar el repositorio en '.', pero te has movido y no está allí. Limpiarlo hace que git vuelva a su comportamiento "normal" (mirando en './. Git', en el lugar donde 'cd'-ed se ha hecho). – torek

2

Otra opción es mencionar el directorio de trabajo y el directorio git en el comando.

git --work-tree=/home/user/repos/my_app --git-dir=/home/user/repos/my_app/.git <command> 

por ejemplo:

git --work-tree=/home/user/repos/my_app --git-dir=/home/user/repos/my_app/.git status 
Cuestiones relacionadas