2012-04-02 28 views
57

¿Hay alguna manera de configurar git de manera que escuche las actualizaciones de un repositorio remoto y se activará cada vez que algo cambie? El caso de uso es que quiero implementar una aplicación web usando git (para obtener el control de versión de la aplicación implementada) pero quiero poner el repositorio git "central" en Github en lugar de hacerlo en el servidor web (la interfaz de Github es tan agradable) .Git: extracción automática del repositorio?

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

Respuesta

33

Git tiene "ganchos", acciones que se pueden ejecutar después de otras acciones. Lo que parece que estás buscando es "gancho post-recepción". En el administrador de github, puede configurar una url posterior a la recepción que será atacada (con una carga conteniendo datos sobre lo que acaba de ser enviado) cada vez que alguien presiona a su repositorio.

Por lo que vale, no creo que el auto-pull sea una buena idea, ¿qué pasa si algo mal se envió a su sucursal? Usaría una herramienta como capistrano (o un equivalente) para tales cosas.

+4

Mi caso de uso planeado era tener un repo/branch por separado para la etapa dev" testing and messing around ", y tener un repositorio especial" push to production "que presionar solo una vez, 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. –

11

En Unix-likes puede crear un trabajo cron que invoque "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.

+2

una adecuada forma de usar Git. – deepdive

+13

@deepdive ¿Por qué no? Imagine que tiene un pequeño Rasperry Pi en su hogar y no tiene IP estática disponible. ¿Qué otra opción tienes y ejecuta un cron o runwhen job? – kaiser

+2

No es una buena idea. Él quiere que los cambios se apliquen inmediatamente después de presionar. –

2

Existen programas de integración continua como Jenkins o Bamboo, que pueden detectar confirmaciones y desencadenar operaciones como compilar, probar, empaquetar e implementar. Hacen lo que quieren, pero están llenos de dependencias, difíciles de configurar y, al final, pueden usar la comprobación periódica contra el repositorio de git, que tendría el mismo efecto, como llamar a git pull by cron cada minuto.

2

Se podría escribir un script para lograr esto haciendo las siguientes cosas:

  1. llegar cabezal remoto commit Identificación
  2. comparar el id con jefe local
  3. si son diferentes, usar git pull y utilizar el comando implementar
  4. si mismo, pasar
  5. escribir una tarea programada para ejecutar el script (NOTA:. Prevenir la ejecución duplicado)
No
Cuestiones relacionadas