git checkout modifica demasiados files

Estoy usando git para publicar un website. El flujo de trabajo es aproximadamente:

$ git add my_file $ git commit -m comment my_file $ git push # Just house-keeping, goes to my master repo $ git push ssh://user@webserver//var/www/repo.git 

Un gancho post-recepción en el server web se ve así:

 #!/bin/bash working=$(pwd) working=${working##*/} working=../${working%.*} while read oldrev newrev ref ; do branch=$(echo ${ref} | cut -d/ -f3) GIT_WORK_TREE=${working} git checkout -f ${branch} done 

La gran mayoría de las veces esto funciona bien. Cuando digo bien, quiero decir, si agregué un file, el process de compra modifica ese único file.

Solo si espero un día y luego realizo otro commit & push, el checkout de git en el hook posterior a la recepción recupera cada file de mi copy de trabajo. No solo toma años, sino que luego se ennetworkinga con una rsync que corro más adelante.

¿Qué puede pasar de la noche a la mañana para que el pago que ocurre mañana sea muy diferente de uno que pueda repetir una y otra vez hoy?

¿Estás usando twigs en absoluto? Parece que, desde su gancho posterior a la recepción, no está filtrando en qué ref que desea utilizar para alojar el código de su sitio. En cambio, realiza un pago por cada reference modificada. Si envía algún código a otra sucursal, su sitio se actualizará para reflejar eso. Creo que probablemente solo quiera ejecutar el pago de la reference que importa (quizás refs/heads/master ), y eso es todo.

Quizás cambiando

 while read oldrev newrev ref ; do branch=$(echo ${ref} | cut -d/ -f3) GIT_WORK_TREE=${working} git checkout -f ${branch} done 

a

 while read oldrev newrev ref ; do if [ "$ref" == "refs/heads/master" ]; then branch=$(echo ${ref} | cut -d/ -f3) GIT_WORK_TREE=${working} git checkout -f ${branch} fi done