Los files de git push no se actualizan de forma remota

Un escenario muy común:

Tenemos un repository desnudo. Si los desarrolladores hacen git push desde su máquina local al repository bare , y luego otro desarrollador lo hace, obtienen la versión local de la aplicación (files incluidos) actualizada.

Sin embargo, de vez en cuando, cuando un cambio se realiza directamente (por nuestro server o lo que sea) en el remote working tree , terminamos teniendo diferentes versiones de files en nuestras máquinas locales, ¡y el remote working tree siempre está desactualizado!

De acuerdo a esto:

https://git.wiki.kernel.org/index.php/GitFaq#non-bare

La operación de inserción siempre se trata de propagar el historial del repository y actualizar los refs, y nunca toca los files del tree de trabajo. En particular, si presiona para actualizar la twig que está desprotegida en un repository remoto, los files en el tree de trabajo no se actualizarán.

No estoy seguro de lo que significa el checked out in a remote repository . No hice ningún git checkout whatever para cambiar sucursales usando ssh de forma remota (si eso es lo que eso significa).

De todos modos, si hacemos git push, no se tocan los files de tree de trabajo. De acuerdo.

Entonces para resolver esto:

Si está seguro de lo que está haciendo, puede hacer un "reinicio de git –hard" en el lado al que presionó. Tenga en count que esto PERDERÁ TODOS los cambios que haya realizado en ese lado, restableciendo el tree de trabajo a la última revisión que haya realizado.

"git reset –hard"

Hice esto, pero nada cambió. Dice:

 HEAD is now at 45d948a Merge branch 'dev' of /home/blabla/private/repos/blabla_hub into dev 

Pero nada ha cambiado.

1) ¿Cómo todos los desarrolladores tienen el tree de trabajo actualizado si solo están presionando y tirando a través de un repository desnudo (sin tree de trabajo)? (¿Dónde pasan los files?)

2) ¿Por qué no obtuve el remote working tree actualizado como se esperaba?

¿Están mis preguntas claras? Por favor aconséjame.

ACTUALIZAR

Estoy usando una twig dev y master. Tanto local como remotamente, aparte de eso, estoy usando este esquema:

La idea key en este sistema es que el website exista en el server como un par de repositorys; un repository simple junto a un repository convencional que contiene el sitio en vivo. Dos ganchos Git simples vinculan al par, empujando y tirando automáticamente de los cambios entre ellos.

Los dos repositorys:

 Hub is a bare repository. All other repositories will be cloned from this. Prime is a standard repository, the live web site is served from its working directory. 

Usar el par de repositorys es simple y flexible. Los clones remotos con ssh-access pueden actualizar el sitio en vivo con un simple git push al Hub. Todos los files editados directamente en el server se duplican instantáneamente en Hub tras la confirmación.

árbitro. http://joemaller.com/990/a-web-focused-git-workflow/

Por lo que entiendo, tiene al less tres repositorys: local , hub y www/dev . Usted hace su trabajo con el repository local (hacer cambios, confirmar y enviar al hub ). A veces, el tree de trabajo www es modificado por el server web. Si desea mantener estos cambios bajo el control de la versión, puede enviarlos al www/dev repo e incluso enviar la confirmación desde www/dev al hub . (Es posible que pueda automatizar esto con un trabajo cron. Sugiero usar el resultado del git status de git status para determinar si desea realizar una confirmación).

Su pregunta original hizo que pareciera que la copy de trabajo para www/dev repo no se sincroniza con el repository www/dev sí. Después de una discusión adicional en el chat, parece que el repo de www/dev no siempre está actualizado con el repo del hub . Solo necesita asegurarse de ejecutar git pull en www/dev repo cuando sea necesario (posiblemente con un gancho u otro script).