¿Cómo ejecutar un command justo después de un command de búsqueda o extracción en git?

Cloné el repository GHC (comstackdor Haskell de Glasgow). Para comstackr el comstackdor, necesita varias bibliotecas, todas ellas también están disponibles como repositorys git. Para facilitar la transmisión en vivo, los hackers de GHC incluyeron una sync-all scripts sync-all cual, cuando se ejecuta, actualiza todos los repositorys dependientes.

Ahora a mi pregunta: ¿Cómo puedo hacer que git ejecute ./sync-all pull después de que hice un git pull automáticamente? Escuché algo sobre el uso de ganchos, pero realmente no sé lo que tengo que hacer.

Por lo general, se utiliza un post-receive o post-update para este tipo de tarea, que se ejecuta después de cada inserción.
La diferencia entre los ganchos posteriores a la recepción y posterior a la actualización se encuentra en los arguments: una post-receive obtendrá los valores antiguos y nuevos de todos los refs además de sus nombres.

La pieza que falta es: ¿ dónde se ejecuta ese gancho?

La publicación del blog " Falta la documentation de git hooks " de (un gran) SO queueborador de Mark Longair arroja algo de luz sobre esto:

el directory de trabajo actual será el directory git .

  • Entonces, si este es un repository /src/git/test.git/ llamado " /src/git/test.git/ ", ese será el directory de trabajo actual – si este es un repository no desnudo y el nivel superior del tree de trabajo es " /home/mark/test/ "entonces el directory de trabajo actual será" /home/mark/test/.git/ "

Chris Johnsen detalla en su respuesta SO : "Si se especifican –-git-dir o GIT_DIR pero no se especifica ninguno de -–work-tree , GIT_WORK_TREE y core.worktree , el directory de trabajo actual se considera como el directory superior de su tree de trabajo "

En otras palabras, su tree de trabajo también será el directory actual (el directory " .git " ), que casi con certeza no es lo que desea .

Asegúrese de que su secuencia de commands hook/post-receive , una vez creado y ejecutable, establezca GIT_WORK_TREE en la ruta correcta, para que su ./sync-all pull se ejecute en el directory correcto (es decir, no " xxx.git " uno )

Cuando ejecutas git pull , git hace una búsqueda seguida de una fusión. Esto significa que puede usar el gancho post-merge para ejecutar una secuencia de commands cuando se completa una extracción.

Para configurar esto, solo necesita crear un script ejecutable en el directory .git/hooks/ su repository llamado post-merge .

Tenga en count que este script no se ejecutará si la fusión falla debido a conflictos.

Intereting Posts