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(que en realidad no es cierto como lo indica Jefromi en su respuesta, pero el enganche todavía no se ejecuta)--template
se copian como no ejecutables y, por lo tanto, no se ejecutan después de lagit clone
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.