La secuencia de commands posterior a la actualización de git no funciona

Después de editar mi pregunta anterior un par de veces, hago una nueva porque ahora es una nueva pregunta.

En .git/hooks/post-update tengo:

 echo "a" >> /home/pi/log git update-server-info git stash git merge testing >> /home/pi/log 

Para hacer un pago automatizado Entonces corro en el cliente:

 git push testing HEAD:testing 

Ahora mi /home/pi/log contiene:

 a Updating ae2f44b..04753a9 Fast-forward application/views/main/index.php | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) 

¡Pero el file no cambió!

 $ git merge testing Already up-to-date. 

Si elimino el script, hago push y ejecuto git stash , git merge testing funciona.

Actualizar

Para probar cambié un número en un file del 17 al 20. Puedo ver la versión correcta del file si ejecuto

 git show application/views/main/index.php 

pero

 vim application/views/main/index.php 

Todavía contiene el número anterior. Pero git afirma que el file está actualizado:

 $ git merge testing Already up-to-date. 

EDITAR

Parece que este es tu problema :

  pre-receive update post-receive post-update 

Estos ganchos se pueden ejecutar en un repository desnudo o no desnudo. En ambos casos, el directory de trabajo actual será el directory git. Entonces, si este es un repository simple llamado "/src/git/test.git/", ese será el directory de trabajo actual – si este es un repository no desnudo y el nivel superior del tree de trabajo es "/ home / mark / test / "entonces el directory de trabajo actual será" /home/mark/test/.git/ ".

En ambos casos, se establece la siguiente variable de entorno: GIT_DIR se establece en '.'

Con un tree de trabajo, esto es inesperadamente incómodo, como se describe en la respuesta de Chris Johnsen a la que me he vinculado anteriormente. Si solo se establece GIT_DIR se GIT_DIR este comentario de la página man de git:

Nota: Si se especifican --git-dir o GIT_DIR , pero no se especifica ninguno de --work-tree, GIT_WORK_TREE y core.worktree , el directory de trabajo actual se considera como el directory superior de su tree de trabajo.

En otras palabras, su tree de trabajo también será el directory actual (el directory ".git"), que casi con certeza no es lo que desea.

Puede intentar configurar GIT_WORK_TREE=.. o GIT_WORK_TREE="$GIT_DIR/.." dentro del gancho


¡Pero el file no cambió!

Lo más probable es que sí. Tal vez solo lo hizo el line-end, o hubo cambios en el espacio en blanco que se ignoran al ver las diferencias, pero sí cambió. Git lo sabe, porque la sum SHA1 del contenido del file ha cambiado.

¿Estás usando windows en cualquier extremo?

Windows tiene una tendencia a meterse con los finales de línea. Ver el core.autocrlf y las opciones relacionadas:

  • ¿Por qué debería usar core.autocrlf = true en Git?

La solución es usar post-receive como señaló Alex. También necesita ejecutar unset GIT_DIR en la parte superior de su script.

En el server, he creado una segunda twig y la he cambiado a ella:

 $ git branch master * testing 

Mi .git/hooks/post-receive ahora se ve así:

 unset GIT_DIR cd .. git merge master 

En el cliente, ejecuto git push .

¿Intentó usar el gancho post-receive lugar? Tal vez algo aún no ha terminado en la post-update y es por eso que la fusión no está funcionando.

También creo que deberías intentar include git reset --hard en la secuencia de commands para que el estado de git se sincronice con el sistema de files.