¿La mejor práctica para una 'provisión' (también 'volver a implementar') git hook?

Quiero poder llamar a un git hook exactamente de 2 maneras dentro de la carpeta de mi proyecto:

  1. actualizar el código a la última revisión, que llamaré Soft Deploy
  2. provision empty dir (o para networkingesplegar), que llamaré Hard Deploy

Una implementación suave se usa la mayor parte del time. Simplemente está actualizando el código en, por ejemplo, mi server Dev con un git pull . El gancho git para esto es claramente post-fusión .

A Hard Deploy es donde estoy confundido. A veces quiero que el proyecto se vuelva a desplegar. Aquí hay un ejemplo: quiero que mi server Dev descargue su database y la resiembra con datos ficticios. No quiero hacer esto con cada jaloneo, solo un deployment fuerte . En la syntax de git, esto podría ser un reset o un checkout , o tal vez un git pull -f . Me gustaría que la syntax de git se equiparase de forma natural en la mente de un desarrollador medio con un deployment duro . Tal vez un restablecimiento completo hace que una persona piense en una networkingistribución? Aunque sería necesario algo que ocurra en el git checkout inicial de git checkout , y un restablecimiento completo no es algo que un desarrollador promedio ejecutaría después de un primer pago.

Mi opinión es que post-checkout es probablemente el mejor gancho para enfocar la atención en un Hard Deploy . El problema principal es que cuando reboto entre las twigs en mi entorno de desarrollo local con git checkout master y git checkout develop , no quiero que vuelva a resecar todo. Preferiría no tener una solución de 3 enlaces: 'implementar', 'actualizar', 're-implementar'. Sería bueno tener el 'deployment' y 'volver a implementar' utilizar el mismo gancho para la simplicidad.

Así que aquí está mi pregunta exacta: ¿Qué git hook debería usar cuando quiero implementar mi proyecto (en lugar de Soft Deploy )?

No hay un gancho que te permita distinguir fácilmente tus dos casos de uso: en los ganchos no tienes acceso a los interruptores de línea de command pasados ​​a git. La manera más fácil puede ser simplemente colocar un pequeño script de shell dentro o al lado de su repository y usarlo para implementarlo.

Si desea agregar algo de "azúcar sintáctico", puede definir alias en git. Aquí hay un ejemplo para agregar ese alias localmente dentro de su repository:

 git config alias.harddeploy '!~/bin/myproject-harddeploy' 

(The ! Le dice a git que ejecute un command externo en lugar de un subcommand git).

Los usuarios pueden simplemente ejecutar git harddeploy .