Con un repositorio oficial como el remoto y múltiples repositorios locales clonados a partir de él, ¿puede un guión precomprometido ser escrito en ese repositorio principal y aplicarse en todos los clones del mismo?Gancho precomprometido/compartido de Git
Respuesta
No lo creo, ya que los ganchos no están clonados.
Puede ser si esa secuencia de comandos hook está versionada, y luego enlaza a (enlace simbólico) en los servidores de clonación (siempre que su sistema operativo soporte esa función de enlace).
O tal vez si los ganchos son parte de un git template directory utilizado para crear los clones (que solo garantizarían su presencia en el repositorio de clonación, eso no garantizaría que realmente se usen y ejecuten).
Pero no creo que haya ninguna forma "central" de hacer cumplir un compromiso.
Como Jefromi explica aún más claramente en los comentarios (el énfasis es mío):
Creo que realmente va en contra de la idea de un repositorio git a ganchos han distribuido forzadas con el repositorio.
Mi clon es mi repositorio. Debería poder usar git como me gusta, incluso elegir si ejecutar o no anzuelos.
(Y desde un punto de vista de la seguridad, eso sería realmente un poco de miedo -. Nadie debe tener la capacidad para obligarme a ejecutar ciertas secuencias de comandos cada vez que ejecutar ciertos comandos git)
estoy de acuerdo con ese comentario , y solo hemos visto formas de aplicar las reglas aplicadas localmente, en un repositorio especializado determinado.
Por ejemplo, no presionaría para el repositorio central directamente, sino que primero presionaría para un repositorio de QA que aceptaría su confirmación solo si sigue ciertas reglas. Si lo hace, entonces el repo de QA impulsará su compromiso al repositorio central.
Otra ilustración derivada directamente de lo que acabo de mencionar sería "Serverless Continuous Integration with Git", una forma de aplicar local compilación privada que funciona antes de empujarlos a cualquier parte.
Creo que realmente va en contra de la idea de que un repositorio git tenga ganchos forzados distribuidos con el repositorio. Mi clon es * mi * repositorio. Debería poder usar git como me gusta, incluso elegir si ejecutar o no anzuelos. (Y desde el punto de vista de la seguridad, eso sería realmente aterrador: nadie debería tener la capacidad de obligarme a ejecutar ciertos guiones cada vez que ejecute ciertos comandos de git). – Cascabel
@Jefromi: ¿sabes qué es lo que te asusta? Cuando escribí el comentario, antes de enviar mi respuesta editada, comencé a escribir 'agregar ...', y Firefox en mi computadora me propuso: "agregar el comentario de Jefromi". No es la primera vez que he estado allí, obviamente;) – VonC
Nota para mí: vea también http://stackoverflow.com/questions/3209208/what-is-the-cleverest-use-of-source-repository-that-you -have-ever-seen/3209767 # 3209767 – VonC
¿Puede un enganche de precompilación se puede generar mediante scripts en ese repositorio principal y se aplica en todos los clones del mismo?
De githooks(5)
:
pre-commit This hook is invoked by git commit, and can be bypassed with --no-verify option.
Desde el gancho fácilmente se puede omitir, parece que la respuesta a su pregunta es "no".
Además, como el directorio .git/hooks no está clonado, no parece haber un mecanismo para enviarlo al cliente.
No puede haber forzado el gancho de precompilación en los repositorios locales de personas, pero en su repo central aún puede ejecutar un gancho de pre-recepción.
F. ex Tenía que estar seguro de que los mensajes de confirmación obedecían ciertas reglas (para integración de trac, etc.) así que utilicé el siguiente enlace de pre recepción, que comprueba cada mensaje de confirmación enviado al repositorio central y denegará empuje si no está bien formado.
#!/bin/sh while read rev_old rev_new ref do MALFORMED="$(git rev-list --oneline $rev_old..$rev_new | egrep -v '#[0-9]+' | awk '{print $1}')" if [ x"$MALFORMED" != x ] then echo Invallid commit message on $MALFORMED exit 1 fi done
para más información ver f.ex https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks
Asumiendo que tiene el código fuente en su repositorio git que tiene un sistema de construcción asociada a ella, se puede configurar el sistema de construcción para establecer el pre-commit gancho, es decir, moviendo o enlazando un gancho precompromiso que ~ está versionado.
No he intentado esto todavía. Vine aquí mientras busqué en Google una solución mejor.
- 1. Git pre-recepción gancho
- 2. gancho de pre-recepción GIT
- 3. Git personalización de gancho global
- 4. Git gancho: habilitar eco comandos
- 5. git, Heroku: gancho de pre-recepción rechazado
- 6. El gancho post-recepción Git no funciona
- 7. ganchos git: ¿hay un gancho clon?
- 8. gancho git-clone y post-checkout
- 9. Enlace simbólico a un gancho en git
- 10. ¿Hay algún gancho git para tirar?
- 11. Ejecutar automáticamente el gancho Git al crear una etiqueta Git
- 12. Gancho de compromiso de validación de código JIRA para 'git'
- 13. Gancho de precompilación de Git: Archivos modificados/agregados
- 14. Git gancho pre-commit: obtener la lista de archivos cambiados
- 15. origen de git push DENEGADO por fallthru, gancho rechazado: gitolite
- 16. Gancho precommitido para JSLint en Mercurial y Git
- 17. git no puede ejecutar python-script como gancho
- 18. ejecutando git 'post-receive' gancho con setuid falla
- 19. git: quién presionó en el gancho posterior a la recepción
- 20. git: argumentos vacíos en la post-recepción gancho
- 21. ¿Cómo es posible usar raw_input() en un gancho Python Git?
- 22. Llamar a 'git pull' desde un gancho post-actualización de git
- 23. Gancho de cliente SVN
- 24. AWS Elastic Beanstalk [rechazada remoto] (gancho declinó)
- 25. Crea un gancho Bit Bitchuit commit?
- 26. Gancho de desconexión de Express.js
- 27. ¿Se pueden administrar las secuencias de comandos de gancho de Can Git junto con el repositorio?
- 28. de comandos Bash dentro de un git posterior a la actualización de gancho
- 29. Gancho Emacsclient en kill
- 30. gancho de Windows con Python
Si desea * ejecución *, use un enlace de actualización en el repositorio central. Si el gancho realiza la verificación por compromiso, aún puede proporcionar un enlace precompromiso; es probable que los desarrolladores lo adopten de forma voluntaria, para que puedan descubrir de inmediato cuando han hecho algo mal, en lugar de esperar hasta que intenten presionar. – Cascabel
Posibles duplicados: (http://stackoverflow.com/questions/3462955/) y (http://stackoverflow.com/questions/427207/) – blong