GIT – restricción de file previa a la confirmación

Todavía estoy buscando otras preguntas similares, pero aún no he encontrado lo que estoy buscando y esperaba algo de ayuda.

Necesito tener un repository de GIT que incluya varios directorys, cada uno con files que tienen diferentes extensiones. Así por ejemplo:

Un directory \ <- A solo tendrá files * .a

El directory B \ <- B solo tendrá files * .b

El directory C \ <- C solo tendrá files * .c, * .d y * .f

Sé que necesito usar el gancho precompromiso para verificar la validation, pero no estoy seguro de la mejor manera de hacerlo. La respuesta directa parece estar saltando a cada directory y asegurándose de que solo existen las extensiones esperadas, pero podría llegar a ser un script bastante largo / complicado ya que algunos directorys tienen múltiples (a veces 10 o más) extensiones de file permitidas.

Si sabe de una manera más simple, me encantaría escuchar algún consejo.

Probablemente desee analizar el resultado de un command Git. La elección más obvia es:

git diff --cached --name-only --diff-filter=ACR 

Esto imprimirá una list de todos los files agregados (A), copydos (C) y renombrados (R). Si lo desea, también puede verificar los files modificados (M), pero siempre que no los deje entrar, eso no será necesario. --name-only evita que obtenga un diff real, y --cached le dice que mire el índice (área de --cached ) en lugar del tree de trabajo, que puede contener cambios no registrados. A continuación, puede hacer la verificación que desee en cada nombre de file impreso.

Alternativamente, puede hacer el directory diff por directory, para facilitar la verificación, algo como:

 git diff --cached --name-only --diff-filter=ACR directory-A | grep -v '\.a$' 

que arrojará una list de todos los files cuyos nombres no terminan en ".a". Reemplace el directory-A y '\.a$' con variables, y luego podría iterar sobre una list de pares directory / regex.