Git: haciendo seguros los repositorios no vacíos

Podría usar alguna guía de los expertos en git sobre cómo hacer que las operaciones de inserción a repositorios no desnudos sean seguras. Básicamente tengo un plan sobre cómo hacer esto, y podría usar algunos consejos sobre si el plan es correcto o no:)

Normalmente, cuando empuja a un repositorio no desnudo en git, su copia de trabajo e índice no se actualizan. Como descubrí, ¡esto puede causar serios problemas si olvida actualizarlos más tarde manualmente!

En nuestro grupo, tenemos algunos repositorios "centrales" de los que las personas clonan y retroceden, pero muchas personas también quieren poder hacer clones de sus clones y empujar / tirar entre ellos según sea necesario de una manera verdaderamente distribuida. Para que esto sea seguro, quiero asegurarme de que cada repositorio creado a través de "clone" o "init" tenga un gancho de recepción posterior instalado automáticamente que actualizará el directorio de trabajo y el índice después de una operación de inserción para estar sincronizado con el nuevo HEAD.

He descubierto que puedo hacer que esto suceda creando un directorio de plantilla con mi gancho posterior a la recepción en un subdirectorio de ganchos, y luego haciendo que todos en mi grupo hagan un:

git config --global init.templatedir /path/to/template/dir

Actualmente mi gancho posterior a la recepción se ve así:

export GIT_WORK_TREE=..
git checkout -f HEAD

Esto PARECE funcionar según lo deseado, pero tengo cierta incertidumbre sobre el comando de pago. Para los fines de sincronizar el directorio de trabajo y el índice con el estado en HEAD, ¿son equivalentes "git checkout -f HEAD" y "git reset --hard HEAD"?

Pregunto porque, aunque sé que "git reset --hard HEAD" hará lo que quiera, usarlo en un gancho posterior a la recepción ralentiza considerablemente las operaciones de empuje en mis pruebas (parece hacer una nueva comprobación de todos los archivos , independientemente de si un archivo está sucio o limpio en el directorio de trabajo). "git checkout -f HEAD" PARECE hacer lo mismo mucho más rápido (consígueme un directorio de trabajo limpio e indice sincronizado con HEAD), pero estoy un poco nervioso dada la propensión del comando de pago a realizar sobre la marcha se fusiona con cambios de directorio de trabajo no comprometidos. ¿Este comando realmente me dará un directorio e índice de trabajo que coincida exactamente con el estado en HEAD en todos los casos (incluyendo, por ejemplo, eliminaciones de archivos, cambios de nombre, etc.)?

Gracias de antemano por cualquier consejo!

Respuestas a la pregunta(2)

Su respuesta a la pregunta