web-dev-qa-db-fra.com

Mise en miroir du référentiel Gitlab

Est-il possible d'avoir gitlab setup pour synchroniser automatiquement (en miroir) un référentiel hébergé sur un autre emplacement?

Pour le moment, le moyen le plus simple que je connaisse consiste à placer manuellement dans les deux référentiels (gitlab et autres), mais cela prend du temps et génère des erreurs.

Le plus gros problème est qu'un miroir peut resynchroniser deux utilisateurs simultanément. Transférer les modifications dans les deux référentiels différents. La meilleure méthode que je puisse trouver pour éviter ce problème est de veiller à ce que les utilisateurs ne puissent accéder qu'à l'un des référentiels.

48
goncalopp

Mise à jour déc. 2016: la mise en miroir est prise en charge avec GitLAb EE 8.2+: voir " mise en miroir du référentiel ".

Comme commenté par Xiaodong Qi :

Cette réponse peut être simplifiée sans utiliser de lignes de commande (il suffit de la configurer sur l'interface de gestion du référentiel Gitlab)


Réponse originale (janvier 2013)

Si votre référentiel miroir distant est un nue référentiel] , vous pouvez alors ajouter un hook post-réception à votre référentiel géré par gitlab et appuyer sur votre référentiel distant.

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

Comme Gitolite (utilisé par Gitlab) mentionne :

si vous souhaitez installer un point d'ancrage dans quelques référentiels spécifiques, faites-le directement sur le serveur.

qui serait dans:

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

Mise en garde (mise à jour d'octobre 2014)

(Ciro Santilli } _ souligne dans les commentaires :

Today (Q4 2014), cela échouera car GitLab enverra automatiquement les liens symboliques github.com/gitlabhq/gitlab-Shell/tree/… vers chaque référentiel géré.
Ainsi, si vous effectuez cette modification, chaque référentiel 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 actuel et en assurant la bijection entre celui-ci et la télécommande, mais je recommande aux personnes de rester loin de ces choses.

Voir (et voter pour) feeadback "Automatique Pousser vers le référentiel de miroirs distants après Push vers le repo GitLab" .


Mise à jour de juillet 2016: ajout de ce type de fonctionnalité pour GitLab EE (Enterprise Edition): MR 249

  • Ajout de la possibilité de saisir une URL Push distante sous les paramètres du référentiel miroir
  • Ajouter le code d'implémentation au Push to repository distant
  • Ajouter un nouveau travailleur de fond
  • Affiche la dernière date de mise à jour et les erreurs de synchronisation si elles existent.
  • Synchronisez le miroir distant toutes les heures.

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

J'essaie actuellement de transférer le développement principal des modules npm Open Source de ma société Lossless GmbH ( https://www.npmjs.com/~lossless ) de GitHub.com à GitLab.com.

J'importe tous les dépôts de GitHub. Cependant, lorsque j'essaie de désactiver Mirror Repository et d'activer Remote Mirror Repository avec l'URL d'origine de GitHub, un message d'erreur s'affiche: 

Remote mirrors url is already in use

Voici l'un des dépôts avec lesquels ce dernier échoue: https://gitlab.com/pushrocks/npmts Modifié il y a 2 mois

s’avère qu’il faut simplement plusieurs étapes:

  • désactiver le référentiel miroir
  • appuyez sur enregistrer
  • enlever l'URL
  • appuyez sur enregistrer
  • puis ajoutez le miroir distant
18
VonC

Si vous n'hébergez pas votre propre GitLab, sachez que GitLab.com a introduit cette fonctionnalité directement, sans solution de rechange.

  1. Depuis un projet, utilisez l’icône représentant une roue dentée pour sélectionner Référentiel miroir
  2. Faites défiler jusqu'à Pousser vers un référentiel distant
  3. Coche Référentiel miroir distant : Met à jour automatiquement les branches, les balises et les validations du miroir distant toutes les heures.
  4. Entrez le référentiel que vous souhaitez mettre à jour. pour GitHub au moins, vous pouvez inclure votre nom d'utilisateur et votre mot de passe dans l'URL, comme suit: https://yourgithubusername:[email protected]/agaric/guts_discuss_resource.git

Notez que si vous extrayez d'un référentiel distant, il sera toujours transféré vers le référentiel distant défini ici. Je ne l'ai pas essayé, mais vous devriez être capable de pousser vers et d'extraire du même référentiel.

8
mlncn

J'ai également créé un projet pour refléter les référentiels dans GitLab 6 via l'API (API principalement utilisée lors de la création de projet uniquement).

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

4
Sam Gleske

Un résumé rapide des dépôts de configuration en miroir avec GitLab et GitHub


  1. GitHub: Paramètres> Paramètres du développeur> Jetons d'accès personnel
    • Vous devez activer: public_repo
  2. GitLab: projet GitLab> Paramètres> Référentiel> Référencement en miroir


Pousser

  • URL du référentiel Git: https://[email protected]/username/repo.git
  • Direction du miroir: Push
  • Méthode d'authentification: Password
    • Mot de passe: your_token


Tirer

  • URL du référentiel Git: https://github.com/username/repo.git
  • Direction du miroir: Pull
  • Méthode d'authentification: leave_empty


Documentation officielle de GitLab

3
Breith

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 vous permet d’exécuter des commandes Shell arbitraires: il vous suffira alors de pousser.

services est la meilleure option si quelqu'un les implémente: ils résident dans l'arborescence des sources, effectuent un seul Push et ne nécessitent pas de surcharge de déploiement.

La principale difficulté d’implémentation est maintenant de savoir comment stocker les informations d’identification Push en toute sécurité: la meilleure option pour GitHub consiste probablement à obtenir une clé (l’authentification sur l'interface utilisateur via le service serait parfaite) et à stocker ce texte en clair.

Une autre option qui vient d’être ajoutée est hooks personnalisés .

Vous pouvez utiliser des points d'ancrage pour personnaliser un script exécuté après une validation. Avec cela, vous pouvez envoyer les nouvelles modifications à un autre référentiel. Recherchez plus d’informations sur hook dans la page suivante: http://git-scm.com/book/fr/Customizing-Git-Git-Hooks

1

GitLab Enterprise Edition prend désormais en charge la mise en miroir du référentiel à partir de la version 8.2. Vous trouverez des informations sur la configuration dans la rubrique d'aide de Repository Mirroring .

0
Scott Willeke

La meilleure option est de ne pas utiliser les points d'ancrage post-réception, mais les commandes de déploiement qui effectuent la synchronisation via rsync, à l'aide de Capistrano si vous aimez Ruby, à l'aide de Shipit si vous préférez JavaScript (Grunt).

0
KouiK