La implementación posterior a la recepción de Git es lenta

Estamos probando el control de la versión de git con nuestros sitios web. La configuration actual tiene dos repositorys simples en una unidad compartida de networking / g / (uno para intranet y otro para internet). Al presionar en este repository, me gustaría que el sitio se compruebe automáticamente en el server web en / x /. Siguiendo la sugerencia de varios blogs y preguntas aquí, configuré un enlace posterior a la recepción de la siguiente manera:

#!/bin/sh GIT_WORK_TREE=/x/intranet checkout -f 

Esto funcionó bien para implementar la twig principal de cada repository. Cada deployment probablemente tomó 5-10 segundos. Sin embargo, también nos gustaría tener una twig de desarrollo que se muestreará automáticamente en un server de desarrollo en / y /. Mi gancho revisado se veía así:

 #!/bin/sh GIT_WORK_TREE=/x/intranet checkout -f master GIT_WORK_TREE=/y/intranet checkout -f dev 

Esto fue muy problemático, ya que empujar ahora tomaría alnetworkingedor de 15 minutos. El problema parecía ser que se reescribió todo el directory de trabajo de cada sucursal, en lugar de simplemente actualizar los files que habían cambiado. Incluso después de agregar una condición para verificar qué twig había sido empujada y solo verificar esa twig, si empujé la twig que no fuera la que había sido empujada previamente, el empuje aún tomaría alnetworkingedor de 10 minutos. Obviamente esto es inaceptable.

Mi bash actual tiene 2 repositorys (una intranet y una internet) en cada server. El gancho que estoy ejecutando ahora se ve de la siguiente manera:

 #!/bin/bash while read oldrev newrev ref do branch=`echo $ref | cut -d/ -f3` if [ "master" == "$branch" ]; then cd /x/intranet unset GIT_DIR git pull --verbose origin master echo "Changes pushed to production server." fi if [ "dev" == "$branch" ]; then cd /y/intranet unset GIT_DIR git pull --verbose origin dev echo "Changes pushed to dev server." fi done 

Este anzuelo aún tarda más de lo que creo que debería correr (casi 2 minutos, en comparación con aproximadamente 4 segundos para ejecutar un tirón en uno de los repos). ¿Hay algún problema con cualquiera de mis implementaciones? ¿O hay otro método que resolverá el problema?

EDITAR: Me preguntaba si el problema podría ser el uso de las unidades montadas en el shell git bash.