¿Es posible cambiar los files y confirmar en git pre-receive / pre-push hook?

Estoy buscando implementar un gancho de pre-recepción / pre-push (No sé cuál debería usarse)

Caso de uso :

Tengo un repository de JSON, cualquiera puede cambiar los files en el repository (es decir, confirmar). Pero en push, me gustaría calcular los diffs (es decir, files agregados / eliminados / modificados) contra el upstream y almacenarlos como otro file JSON en el repository y continuar el impulso junto con el nuevo JSON que se agregó.

es posible?

pre-recieve es un gancho del lado del server. En function de sus necesidades, será mejor que utilice el enlace precompromiso o preejecución. Y los ganchos pueden cambiar un cierto file.

Como para pre-commit hooke, puede usar la secuencia de commands siguiente para agregar una string a un nombre de file y confirmar los cambios cuando se confirmen los cambios:

 #!/bin/sh echo "string" >> filename git add filename 

Esta información que necesita es trivialmente computable. Un git diff entre las versiones puede darle la información que necesita. Mantenerlo en un file corre el riesgo de que las cosas vayan sincronizadas. Preferiría que esto se generara sobre la marcha según fuera necesario directamente desde el repository en lugar de leer desde un caching. Entonces, no estoy seguro de por qué querrías hacer esto. Sin embargo, si lo necesitara, iría sobre esto de una de las siguientes maneras.

  1. Un gancho post-commit que hará este cambio en el lado del cliente antes de presionarlo. Esto tiene la desventaja de que las personas verán confirmaciones en sus códigos que no hicieron.

  2. Proporcionar una secuencia de commands que hará esto y rechazar bashs (utilizando un enlace de service) hasta que el usuario ejecute la secuencia de commands y genere esta información en el repository. Esto lo convierte en un pequeño manual, pero el usuario sabe lo que ha hecho y tiene el control.

  3. Tener una secuencia de commands ejecutándose en el server después de la confirmación (tal vez en lotes) que generará esta información y la almacenará preferiblemente en un repository separado.