Git: ¿extracción automática del repositorio?

90

¿Hay alguna forma de configurar git de modo que escuche las actualizaciones de un repositorio remoto y las extraiga cada vez que algo cambie? El caso de uso es que quiero implementar una aplicación web usando git (así que obtengo el control de la versión de la aplicación implementada) pero quiero poner el repositorio de git "central" en Github en lugar de en el servidor web (la interfaz de Github es tan agradable) .

¿Alguien ha conseguido que esto funcione? ¿Cómo lo hace Heroku? Mi Google-fu no me da ningún resultado relevante.

Li Haoyi
fuente

Respuestas:

48

Git tiene "ganchos", acciones que se pueden ejecutar después de otras acciones. Lo que parece estar buscando es un "gancho posterior a la recepción". En el administrador de github, puede configurar una URL posterior a la recepción que se activará (con una carga útil que contiene datos sobre lo que se acaba de enviar) cada vez que alguien ingrese a su repositorio.

Por lo que vale, no creo que la extracción automática sea una buena idea: ¿qué pasa si se envió algo incorrecto a su sucursal? Usaría una herramienta como capistrano(o equivalente) para tales cosas.

ksol
fuente
10
Mi caso de uso planeado era tener un repositorio / rama separado para la etapa de desarrollo "probar y jugar", y tener un repositorio especial de "empuje a producción" al que presiono solo una vez que estoy seguro de que todo funciona. Básicamente, estoy usando Git para hacer con rsync, excepto que mantiene un registro de todas las versiones que se implementan, y fácilmente podría volver a una versión anterior. La ventaja sobre algo más duro como capistrano es que no tendría que aprender una herramienta completamente nueva para lo que es (a partir de ahora) un proyecto realmente pequeño.
Li Haoyi
La autenticación de webhook agrega problemas de seguridad y complejidad adicionales, por lo que las soluciones basadas en extracción aún tienen sus ventajas. El control de la versión de lanzamiento se puede realizar con etiquetas para evitar una implementación accidental.
lz96
21

En los me gusta de Unix, puede crear un trabajo cron que llame a "git pull" (todos los días o todas las semanas o lo que sea) en su máquina. En Windows, puede usar el programador de tareas o el comando "AT" para hacer lo mismo.

SigTerm
fuente
3
No es una forma adecuada de usar Git.
buceo profundo
26
@deepdive ¿Por qué no? Imagina que tienes una pequeña Rasperry Pi en tu casa y no tienes una IP estática disponible. ¿Qué otra opción tienes para ejecutar un cron o runwhen?
Kaiser
2
No es una buena idea. Quiere que los cambios se apliquen inmediatamente después de presionar.
boi_echos
10
El OP está solicitando específicamente un método que escuche las actualizaciones de un repositorio remoto y las extraerá cada vez que algo cambie . Esta solución simplemente se extrae del repositorio de vez en cuando, por lo que para que sea eficaz, el intervalo debe ser muy corto, lo que da lugar a una gran cantidad de solicitudes de extracción redundantes.
Boaz
3
Una forma rápida de hacer esto sin cambiar cron tab: while true; do git pull; sleep 10; done. Esto lo hará git pullcada 10 segundos ...
JakeD
3

Existen programas de integración continua como Jenkins o Bamboo, que pueden detectar confirmaciones y activar operaciones como compilación, prueba, empaquetado e implementación. Hacen lo que quieres, pero tienen muchas dependencias, son difíciles de configurar y, al final, pueden usar una verificación periódica contra el repositorio de git, lo que tendría el mismo efecto que llamar a git pull por cron cada minuto.

Pavel Niedoba
fuente