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.
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 degitlab-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
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'activerRemote 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
Si vous n'hébergez pas votre propre GitLab, sachez que GitLab.com a introduit cette fonctionnalité directement, sans solution de rechange.
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.
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).
public_repo
https://[email protected]/username/repo.git
Push
Password
your_token
https://github.com/username/repo.git
Pull
leave_empty
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
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 .
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).