¿Cómo mantener una carpeta actualizada con un git repo?

Esto es para un script de shell que verificará periódicamente github para el último código, y lo downloadá, comstackrá y ejecutará si hay alguna diferencia entre lo que ya tengo localmente y lo que se extrajo.

Sé que siempre puedo clonarlo en un nuevo directory, y luego verificar los cambios e ir desde allí, pero eso parece increíblemente derrochador, ya que git ya debería tener la lógica para verificar las diferencias entre los files y actualizar solo esos.

Para complicar el asunto, la versión "local" puede ser en algún momento la "última" versión, y en este caso quiero descartar los "nuevos" cambios y extraerlos del repository "estable"

Actualmente tengo esto:

status=`cd $gitDir && git pull` if [ "$status" != "Already up-to-date." ]; then cd $gitDir && git fetch origin cd $gitDir && git reset --hard origin/master 

pero falla cuando el "local" es "más nuevo" – ¿sugerencias?

actualización: he analizado la opción de limpieza, sin embargo, eso elimina los files excluidos en el .gitignore; quiero una solución que los deje en paz, pero descarta cualquier cambio en los files fuente y extrae los últimos de github.

actualización # 2: creo que esto es lo que necesito:

 git fetch --all git reset --hard origin/master 

pero tendré que hacer algunas testings, una confirmación de que hace lo que estoy buscando sería agradable

actualización # 3: parece que

 git reset --hard origin/master git reset --hard HEAD 

funciona en cuanto a sobreescribir los files locales, pero ahora ¿cómo puedo saber si los dos son diferentes? (investigando en git diff …)

En primer lugar, desde git 1.8.5 (noviembre de 2013), puede usar la opción -C para git , como en " git --git-dir no funciona como se esperaba ".

 status=`git -C $gitDir pull` if [ "$status" != "Already up-to-date." ]; then git -C $gitDir fetch origin git -C $gitDir reset --hard origin/master 

En segundo lugar, podría escuchar en su cliente una carga útil JSON proveniente de un webhook de GitHub activado en un empuje hacia ese repository de GitHub .
De esta forma, no tendrías que ejecutar tu script a less que realmente sea necesario.