2011-10-04 14 views
7

Estoy intentando utilizar el gancho post-commit siguiente para desplegar en un directorio en particular después de cada confirmación exitosa:¿Por qué la configuración de GIT_WORK_TREE no funciona en un enganche post-commit?

#!/bin/sh 
export GIT_WORK_TREE=/var/www/example/ 
export GIT_DIR=/home/mark/test/.git/ 
git checkout -f 

Sin embargo, después de cometer me sale el siguiente error:

$ git commit -m 'An example commit.' 
fatal: Unable to create '/var/www/example/.git/index.lock': No such file or directory 
[master 0938e48] An example commit. 

... como si se estuviera ignorando la configuración GIT_WORK_TREE. ¿Por qué parece que el ajuste de esta variable de entorno no funciona? Estoy usando la versión de Git 1.7.4.1.

Respuesta

18

El problema aquí es que en post-commit ganchos (y también pre-commit, prepare-commit-msg y commit-msgt) la variable de entorno GIT_INDEX_FILE se establece en .git/index. (Este no está documentada en el githooks documentation, pero he publicado en otro lugar about the settings of environment variables and the current directory in git hooks.)

El efecto de la variable de entorno GIT_INDEX_FILE se describe en la sección VARIABLES DE ENTORNO de la página git hombre como:

GIT_INDEX_FILE

This environment [variable] allows the specification of an alternate index file. If not specified, the default of $GIT_DIR/index is used.

... y por alguna razón, en esta situación, GIT_INDEX_FILE está siendo utilizado en relación con GIT_WORK_TREE.

para hacer que el gancho como era de esperar, sólo tiene que desarmar GIT_INDEX_FILE, por lo que su gancho se vería así:

#!/bin/sh 
unset GIT_INDEX_FILE 
export GIT_WORK_TREE=/var/www/example/ 
export GIT_DIR=/home/mark/test/.git/ 
git checkout -f 
+1

Podría esto también puede usarse para hacer que las opciones worktree y gitdir trabajan en git escondite y otros comandos? 'git --worktree --gitdir ' parece funcionar solo en ciertos comandos. –

+0

@ Adam Dymitruk: He encontrado que '-work-tree = DIRECTORY' y' --git-dir = DIRECTORY' funcionan confiablemente fuera de los ganchos independientemente del comando, siempre que yo (a) los configure a ambos, y (b) establecer ambos en rutas absolutas, solo para evitar tener que recordar las confusas reglas sobre cómo se calcula el árbol de trabajo eventual y el directorio del repositorio ... –

+0

esto está fuera de un gancho. algunos trabajos, otros no ... Tendré que confirmar si algunos de ellos no funcionan debido a caminos relativos ... Pero sería extraño para ese tipo de comportamiento ya que estoy usando el mismo camino y solo estoy cambiando El comando. –

Cuestiones relacionadas