tutorial para espaƱol descargar commands comandos git

para - git repository



Git checkout en el enlace posterior a la recepciĆ³n: "No es un repositorio de git ''". (1)

[Editar, febrero de 2017: esta vieja respuesta aún se ve afectada, así que vamos a agregar algunas notas. (1) Este tipo de actualización en vivo a menudo es una mala idea: asegúrese de saber por qué lo está haciendo y de que no va a arruinar su propio trabajo. (2) En Git desde la updateInstead 2.3, ahora puede configurar updateInstead para updateInstead , más un updateInstead de updateInstead en Git 2.4 y versiones posteriores. Para más detalles, vea la documentación de git config .]

El $GIT_DIR posterior a la recepción se ejecuta con $GIT_DIR establecido en . . Esto hace que git busque ./HEAD , ./refs/heads/master , etc., en lugar de .git/HEAD , .git/refs/heads/master , etc. Pero, como no hace nada para cambiar $PWD en el gancho (como se muestra de todos modos), el gancho se ejecutará en el subdirectorio .git ( /home/andrew/web/.git ), y por lo tanto este error es bastante misterioso:. será de hecho un repositorio válido de git.

Un truco estándar que evita la codificación del nombre de la ruta es usar cd ..; git checkout -f cd ..; git checkout -f como el gancho posterior a la recepción. Aquí es donde la configuración de $GIT_DIR convierte en un problema, porque después de cd .. el gancho se está ejecutando (aún asumiendo este caso) /home/andrew/web y, por supuesto, en ese punto, $GIT_DIR debería ser .git lugar de . . La solución estándar para eso es simplemente desarmar GIT_DIR (establecerlo en .git también funcionaría).

Sin embargo, su gancho posterior a la recepción, como se muestra, funciona bien para mí (con los cambios apropiados en la ruta). Entonces, de nuevo estoy empujando desde una máquina similar a Unix, no desde una PC. ¿Es posible que suceda algo más, que cambie los directorios fuera del subdirectorio .git ? Puedes hacer algo como echo running in $PWD en el gancho para ver dónde estás.

Tengo un repositorio no desnudo en mi servidor (dirs / home / andrew / web y /home/andrew/web/.git), configuré receive.denyCurrentBranch para ignorarlo y creé el enlace posterior a la recepción:

#!/bin/sh GIT_WORK_TREE=/home/andrew/web git checkout -f

Cuando ejecuto sh .git / hooks / post-receive, todo funciona bien. Pero cuando empujo desde mi PC me sale este error:

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

¿Hay alguna manera de cómo puedo resolver este problema? ¿Y eventualmente sin tener que cambiar de repositorio?

Gracias

EDIT: Aquí está mi nuevo gancho post-recibir. Por qué es así, esto se ha descrito en la respuesta aceptada.

echo "/nChecking out $PWD" GIT_DIR=/home/andrew/web/.git GIT_WORK_TREE=/home/andrew/web git checkout -f