2011-04-07 6 views

Respuesta

37

El "nombre del repositorio" no es una idea bien definida en git, creo. Quizás lo que sería más útil es devolver whatever.git en el caso de un repositorio vacío o whatever en el caso de un repositorio con un árbol de trabajo. He probado que este poco de ofertas shell Bourne con ambos casos adecuadamente desde el interior de un gancho post-receive:

if [ $(git rev-parse --is-bare-repository) = true ] 
then 
    REPOSITORY_BASENAME=$(basename "$PWD") 
else 
    REPOSITORY_BASENAME=$(basename $(readlink -nf "$PWD"/..)) 
fi 
echo REPOSITORY_BASENAME is $REPOSITORY_BASENAME 

Actualización: si desea eliminar la extensión .git en el caso del repositorio desnudo, se podría añadir una línea con el primer caso a la tira que lo apaga:

REPOSITORY_BASENAME=$(basename "$PWD") 
    REPOSITORY_BASENAME=${REPOSITORY_BASENAME%.git} 
+1

Genial. Eso funciona. ¿Cómo puedo eliminar el ".git" de un repositorio desnudo? – Jacko

+0

@Jacko: He actualizado la respuesta para sugerir una manera de hacerlo –

+0

Aweseome !!!! Gracias. – Jacko

1

Puede inspeccionar $ GIT_DIR o $ GIT_WORK_TREE y obtener el nombre del repositorio desde allí.

+2

'GIT_DIR' acaba de establecerse en' .' y 'GIT_WORK_TREE' no está configurado en el entorno para ganchos. –

0

Puede hacer git rev-parse --show-toplevel, que le dará la ruta del directorio de nivel superior, y sacará el nombre de eso (reponame.git es convencional para los repos remotos accesibles).

$PWD también podría tener la misma información, pero no estoy seguro.

+1

'git rev-parse --show-toplevel' no funcionará en un repositorio simple. ('$ PWD' será el nivel superior del árbol de trabajo para un repositorio con un árbol de trabajo, o el directorio del repositorio mismo para un repositorio desnudo, por lo que necesita hacer un poco más de trabajo para obtener un nombre útil ...) –

0

Si uno está utilizando Gitolite, la variable GL_REPO está disponible en el entorno de post-receive por defecto.

Cuestiones relacionadas