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
hooksdel nuevo repositorio, pero por defecto todos están deshabilitados. Para habilitar un.sampleeliminando 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)--templatese 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.