receive ocean made hooks example easy digitalocean automatically git hook git-clone

ocean - git pull automatically



git-clone y post-checkout hook (2)

De la http://git-scm.com/docs/githooks :

Cuando se ejecuta git-init , un puñado de ejemplos de enganches se copian en el directorio de hooks del nuevo repositorio, pero por defecto todos están deshabilitados. Para habilitar un .sample eliminando su sufijo .sample .

Esta inicialización se lleva a cabo como parte de la creación de un clon: tenga en cuenta la llamada a init_db en builtin-clone.c .

Por ejemplo:

$ cat /tmp/my-git-template/hooks/post-checkout #! /bin/bash echo "Hello from $0" $ git clone --template=/tmp/my-git-template file:///tmp/repo.git my-clone Initialized empty Git repository in /tmp/my-clone/.git/ remote: Counting objects: 3, done. remote: Total 3 (delta 0), reused 0 (delta 0) Receiving objects: 100% (3/3), done. Hello from .git/hooks/post-checkout

De acuerdo con el manual, el post-checkout se ejecuta después de una git checkout (tal como se esperaba), pero también después de un git clone (a menos que pase la --no-checkout ).

Muy bien, ahora, considerando lo siguiente:

  • no tienes un repositorio local antes de un git clone
  • Los ganchos no están sincronizados entre los mandos a distancia.
  • los ganchos almacenados en un directorio de plantillas personalizadas utilizado con --template se copian como no ejecutables y, por lo tanto, no se ejecutan después de la git clone (que en realidad no es cierto como lo indica Jefromi en su respuesta, pero el enganche todavía no se ejecuta)

Parece imposible que un enganche post-checkout se ejecute después de un git clone . Aún así, la página de manual de githooks en http://git-scm.com/docs/githooks indica explícitamente una forma de evitar que se ejecute, y también los parámetros pasados ​​en caso de que se ejecute, lo que indicaría que es posible ejecutar una costumbre Enganche después de un git-clone .

Entonces, ¿cómo es posible? Obviamente me estoy perdiendo algo aquí.

Resulta


Supongo que podría realizar una instalación personalizada: cambie el nombre de los enlaces en .../share/git-core/templates/hooks para eliminar el sufijo .sample .

También puede crear un directorio de plantillas lleno de enlaces simbólicos a un directorio de enlaces dentro del repositorio (por ejemplo, post-checkout -> ../../hooks/post-checkout ). Luego, si el repositorio clonado contenía ese gancho en particular, se ejecutaría.

Sin embargo, tienes razón, en la mayoría de los casos no sucederá.

Edición: acabo de probarlo, y la opción --template parece preservar los permisos, por lo que es una forma mucho más sencilla de hacerlo realidad. ¿Qué viste para indicar que lo despojaste?

La última palabra sobre las versiones: está buscando en la documentación en línea una versión más nueva de git que la que está usando. Esta función se agregó en dfa7a6c (clonar: ejecutar el enlace posterior a la comprobación al realizar el pago); git describe dice que esto no se incluyó hasta v1.6.2-rc2.