git post-receive hook no elimina files

Estoy probando git en este momento, y estoy tratando de crear un flujo de trabajo para que un push a un repository remoto simple en el server actualice 2 sitios diferentes basados ​​en diferentes twigs.

El gancho post-recepción es:

#!/bin/sh GIT_WORK_TREE=/www/development/ git checkout -f master GIT_WORK_TREE=/www/production/ git checkout -f production 

basado en http://sofes.miximages.com/a/3838804/1097483 pero con algunas modificaciones.

Desafortunadamente, al probarlo, se enviará un nuevo file de testing a cualquiera de las twigs y se actualizará correctamente la raíz web, pero para eliminar el mismo file de testing, la raíz web aún conserva una copy del file eliminado.

¿Alguien sabe cómo puedo get el gancho post-recepción para forzar una eliminación?

Probablemente deberías usar git-reset y git-clean :

 #!/bin/sh GIT_WORK_TREE=/www/development/ git reset --hard master GIT_WORK_TREE=/www/development/ git clean -fdx GIT_WORK_TREE=/www/production/ git reset --hard production GIT_WORK_TREE=/www/production/ git clean -fdx 

Creo que la verificación del tree de trabajo no registra ninguna información sobre el repository en el directory de trabajo. Por lo tanto, al actualizar una versión ya desprotegida, Git no podrá decir qué diff debería aplicar y, por lo tanto, qué files debe eliminar.

La solución más fácil sería eliminar todos los files en las carpetas antes de revisarlos.

Terminé haciendo

 #!/bin/sh GIT_WORK_TREE=/www/development/ git checkout -f master GIT_WORK_TREE=/www/development/ git clean -fdx GIT_WORK_TREE=/www/production/ git checkout -f production GIT_WORK_TREE=/www/production/ git clean -fdx 

basado en la respuesta de @Koraktor.