tag practices create crear commits commands best git version-control mirroring gitlab

practices - github tags



Espejo del repositorio de Gitlab (7)

Actualización de diciembre de 2016: se respalda la duplicación con GitLAb EE 8.2+: ver " Repositorio duplicado ".

Como comentó Xiaodong Qi :

Esta respuesta se puede simplificar sin utilizar ninguna línea de comando (simplemente configúrela en la interfaz de gestión de repo de Gitlab)

Respuesta original (enero de 2013)

Si su repositorio espejo remoto es un repositorio desnudo , puede agregar un gancho posterior a la recepción a su repositorio gestionado por gitlab, y enviarlo a su repositorio remoto.

#!/bin/bash git push --mirror [email protected]:/path/to/repo.git

Como Gitolite (usado por Gitlab) mentions :

si desea instalar un enlace en solo algunos repositorios específicos, hágalo directamente en el servidor.

que estaría en:

~git/repositories/yourRepo.git/hook/post-receive

Advertencia (Actualizar Ocotober 2014)

Ciro Santilli señala en los comentarios :

Hoy (cuarto trimestre de 2014) esto fracasará porque GitLab sincroniza automáticamente github.com/gitlabhq/gitlab-shell/tree/... en cada repositorio que gestiona.
Entonces, si haces este cambio, todos los repositorios que modifiques intentarán impulsar.
Sin mencionar los posibles conflictos al actualizar gitlab-shell , y que el script actual es un script de ruby, no bash (¡y no deberías eliminarlo!).

Puede corregir esto leyendo el nombre del directorio actual y asegurando la biyección entre eso y el control remoto, pero recomiendo a la gente que se mantenga lejos de esas cosas

Consulte (y vote por) feedback.gitlab.com/forums/176466-general/suggestions/… .

Actualización de julio de 2016: Veo este tipo de características añadidas para GitLab EE (Enterprise Edition): MR 249

  • Agregue la capacidad de ingresar URL de inserción remota en la configuración de Repositorio duplicado
  • Agregar código de implementación para enviar al repositorio remoto
  • Agregar nuevo trabajador de fondo
  • Mostrar la fecha de actualización más reciente y los errores de sincronización si existen.
  • Sincronice el espejo remoto cada hora.

Tenga en cuenta que el Remote Mirror Repository reciente ( problemas 17940 ) puede ser complicado:

Actualmente estoy tratando de cambiar el desarrollo principal de los módulos de Open Source npm de mi empresa Lossless GmbH ( https://www.npmjs.com/~lossless ) de GitHub.com a GitLab.com

Estoy importando todos los repos de GitHub, sin embargo, cuando trato de desactivar Mirror Repository y activar Remote Mirror Repository con la URL original de GitHub aparece un mensaje de error que dice:

Remote mirrors url is already in use

Aquí está uno de los repos que falla: https://gitlab.com/pushrocks/npmts Editado hace 2 meses

Resulta que solo requiere varios pasos:

  • desactivar el repositorio espejo
  • presionar guardar
  • eliminar el URl
  • presionar guardar
  • luego agrega el espejo remoto

¿Es posible tener la configuración de gitlab para sincronizar (duplicar) automáticamente un repositorio alojado en otra ubicación?

Por el momento, la forma más fácil que conozco de hacerlo es presionar manualmente a los dos (gitlab y el otro) repositorio, pero esto lleva mucho tiempo y es propenso a errores.

El mayor problema es que un espejo puede resincronizarse cuando dos usuarios realizan simultáneamente cambios en los dos repositorios diferentes. El mejor método que se me ocurre para evitar este problema es garantizar que los usuarios solo puedan acceder a uno de los repositorios.


GitLab Enterprise Edition ahora es compatible con la duplicación de repositorios a partir de la versión 8.2. La información sobre cómo configurar esto se encuentra en el tema de ayuda Reflejo de reflejo .


La mejor opción es no utilizar anzuelos posteriores a la recepción, sino implementar comandos que realicen la sincronización mediante rsync, utilizando Capistrano si le gusta Ruby, utilizando Shipit si prefiere Javascript (Grunt).


La mejor opción hoy es usar GitLab CI. Es esencialmente un servidor ya implementado para los webhooks, que automáticamente clona para usted y le permite ejecutar comandos de shell arbitrarios: todo lo que tiene que hacer es presionar.

services son la mejor opción si alguien los implementa: viven en el árbol fuente, realizarán un solo empujón y no requerirán gastos adicionales de implementación.

La dificultad clave de la implementación ahora es cómo almacenar las credenciales de inserción de forma segura: probablemente la mejor opción para GitHub sea obtener una clave de alguna manera (Oauth en la interfaz de usuario a través del servicio sería perfecto) y almacenar ese texto sin formato.

Otra opción que acaba de agregarse son los ganchos personalizados .


Puede usar ganchos para personalizar un script que se ejecuta después de un commit. Con eso puedes enviar los nuevos cambios a otro repositorio. Busque más información sobre gancho en la siguiente página: http://git-scm.com/book/en/Customizing-Git-Git-Hooks


Si no está alojando su propio GitLab, vale la pena saber que GitLab.com ha introducido esta característica directamente, sin ninguna solución alternativa.

  1. Desde dentro de un proyecto, use el ícono de ajustes para seleccionar Mirror Repository
  2. Desplácese hacia abajo para enviar a un repositorio remoto
  3. Checkmark Remote mirror repository : actualiza automáticamente las ramificaciones, las etiquetas y las confirmaciones de la réplica remota desde este repositorio cada hora.
  4. Ingrese el repositorio que desea actualizar; para GitHub, al menos puede incluir su nombre de usuario y contraseña en la URL, así: https://yourgithubusername:[email protected]/agaric/guts_discuss_resource.git

Tenga en cuenta que si extrae de un repositorio remoto, seguirá presionando en el repositorio remoto establecido aquí. No lo he intentado, pero deberías poder empujar hacia y desde el mismo repositorio.


También creé un proyecto para duplicar repositorios en GitLab 6 a través de la API (API utilizada principalmente en la creación de proyectos solamente).

https://github.com/sag47/gitlab-mirrors