Mise en miroir du dépôt Gitlab

est-il possible d'avoir gitlab setup pour synchroniser automatiquement (miroir) un dépôt hébergé à un autre endroit?

à l'heure actuelle, la façon la plus facile que je connaisse de faire cela consiste à pousser manuellement vers les deux (gitlab et l'autre) dépôts, mais cela prend du temps et est sujet à des erreurs.

Le plus grand problème est qu'un miroir peut resynchroniser est deux utilisateurs simultanément pousser changements pour les deux référentiel. La meilleure méthode que je peux venir avec pour éviter ce problème est de s'assurer que les utilisateurs ne peuvent pousser à l'un des dépôts.

44
demandé sur goncalopp 2013-01-12 03:24:24

8 réponses

mise à jour Décembre 2016: la mise en miroir est supportée par GitLAb EE 8.2+: voir dépôt miroir ".

commentée par Xiaodong Qi :

cette réponse peut être simplifiée sans utiliser de ligne de commande (il suffit de la configurer sur L'interface de gestion Gitlab repo)


réponse Originale à cette question (janvier 2013)

si votre Remote mirror repo est un 1519250920 "nu repo , alors vous pouvez ajouter un crochet post-receive à votre repo gérée par gitlab, et push à votre Remote repo.

#!/bin/bash
git push --mirror slave_user@mirror.host:/path/to/repo.git

comme Gitolite (utilisé par Gitlab) mentions :

si vous voulez installer un hook dans seulement quelques dépôts spécifiques, faites-le directement sur le serveur.

qui serait dans:

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

Mise En Garde (Mise À Jour Octobre 2014)

Ciro Santilli souligne dans les commentaires :

Aujourd'hui (T4 2014) cela échouera parce que GitLab automatiquement symlinks github.com/gitlabhq/gitlab-shell/tree/ ... dans chaque dépôt qu'il gère.

Donc si vous faites ce changement, chaque dépôt que vous modifiez essaiera de pousser.

Sans parler des conflits possibles lors de la mise à niveau de gitlab-shell , et que le script actuel est un script ruby, pas bash (et vous ne devriez pas le supprimer!).

vous pouvez corriger cela en lisant le nom du répertoire courant et en assurant une bijection entre celui-ci et la télécommande, mais je recommande aux gens de rester loin de ces choses

Voir (et voter) feeadback " Automatique pousser à distance miroir de pensions après le pousser pour GitLab Repo " .


mise à Jour en juillet 2016: je vois ce genre de fonctionnalité ajoutée pour GitLab EE (Enterprise Edition): M. 249

  • ajouter la possibilité d'entrer L'URL push à distance sous les paramètres de dépôt miroir
  • ajouter mise en œuvre code pour le pousser à distance référentiel
  • Ajouter nouveau travailleur d'arrière-plan
  • affiche la date de dernière mise à jour et les erreurs de synchronisation si elles existent.
  • synchroniser le miroir à distance toutes les heures.

notez que le récent Remote Mirror Repository ( numéros 17940 ) peut être délicat:

je suis en train d'essayer de changer le développement principal des modules Open Source npm de mon société Lossless GmbH ( ) https://www.npmjs.com / ~lossless ) du GitHub.com pour GitLab.com

j'importe toutes les repos de GitHub, cependant quand j'essaie de désactiver Mirror Repository et d'activer Remote Mirror Repository avec L'URL originale de GitHub je reçois une erreur disant:

Remote mirrors url is already in use

Voici une des repos qui ne fonctionne pas avec: https://gitlab.com/pushrocks/npmts Publié il y a 2 mois

s'avère, il suffit de plusieurs étapes:

  • désactiver le dépôt miroir
  • sauver la presse
  • supprimer l'URl
  • sauver la presse
  • puis ajouter le miroir distant
17
répondu VonC 2017-05-23 12:02:18

si vous n'hébergez pas votre propre GitLab, il vaut la peine de savoir GitLab.com a introduit cette fonctionnalité directement, sans aucune solution de rechange.

  1. de l'intérieur d'un projet utilisez l'icône d'engrenage pour sélectionner dépôt miroir
  2. faites Défiler jusqu'à Poussée à un dépôt distant
  3. Checkmark Remote mirror repository : mise à jour automatique du miroir distant branches, tags, et commits de ce dépôt toutes les heures.
  4. entrez le dépôt que vous voulez mettre à jour; pour GitHub au moins vous pouvez inclure votre nom d'utilisateur et mot de passe dans L'URL, comme suit: https://yourgithubusername:yourgithubpassword@github.com/agaric/guts_discuss_resource.git

notez que si vous sortez d'un dépôt distant, il va tout de même passer au dépôt distant défini ici. Je ne l'ai pas essayé, mais vous devriez être capable de pousser et tirer du même dépôt.

7
répondu mlncn 2016-07-11 09:00:31

j'ai également créé un projet de miroir de dépôts dans GitLab 6 à travers L'API (API principalement utilisé pour la création de projets seulement).

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

4
répondu Sam Gleske 2013-09-16 14:54:20

la meilleure option aujourd'hui est D'utiliser GitLab CI. Il s'agit essentiellement d'un serveur déjà implémenté pour les webhooks, qui clone automatiquement pour vous et exécutez des commandes shell arbitraires: tout ce que vous avez à faire alors est de pousser.

services sont la meilleure option si quelqu'un les implémente: ils vivent dans l'arbre des sources, feraient une seule poussée, et ne nécessitent pas de déploiement supplémentaire au-dessus.

la mise en œuvre clé la difficulté est maintenant de stocker les informations d'identification push en toute sécurité: probablement la meilleure option pour GitHub est d'obtenir une clé d'une manière ou d'une autre (Oauth on UI via le service serait parfait) et de stocker ce plaintext.

une autre option qui vient d'être ajoutée est custom hooks .

3

vous pouvez utiliser des crochets pour personnaliser un script qui court après un certain commit. Avec cela, vous pouvez envoyer les nouvelles modifications à un autre référentiel. Rechercher plus d'informations sur hook dans la page suivante: http://git-scm.com/book/en/Customizing-Git-Git-Hooks

1
répondu William Seiti Mizuta 2013-01-11 23:29:51

la meilleure option n'est pas d'utiliser des crochets post-receive, mais des commandes de déploiement qui effectuent la synchronisation via rsync, en utilisant Capistrano si vous aimez Ruby, en utilisant Shipit si vous préférez Javascript (Grunt).

0
répondu KouiK 2015-03-15 09:10:56

GitLab Enterprise Edition prend désormais en charge la mise en miroir du dépôt depuis la version 8.2. Les informations sur la façon de configurer ceci se trouvent dans le sujet D'aide "Miroir de dépôt .

0
répondu Scott Willeke 2016-12-29 18:54:53

Un résumé rapide de configurer mise en miroir des référentiels avec GitLab et GitHub



  1. Github : Paramètres > Paramètres du développeur > jetons D'accès personnels
    • vous devez activer: public_repo
  2. GitLab : projet GitLab > paramètres > dépôt > dépôts en miroir



Push

  • Git repository URL : https://username@github.com/username/repo.git
  • direction du miroir : Push
  • méthode D'authentification : Password
    • mot de passe : your_token



Pull

  • Git repository URL : https://github.com/username/repo.git
  • direction du miroir : Pull
  • méthode D'authentification : leave_empty



documentation officielle GitLab

0
répondu Breith 2018-09-27 20:32:03