2013-01-11 11 views
41

क्या gitlab सेटअप किसी अन्य स्थान पर होस्ट किए गए भंडार को स्वचालित रूप से सिंक (दर्पण) करने के लिए संभव है?गिटलैब रिपोजिटरी मिररिंग

फिलहाल, मुझे ऐसा करने का सबसे आसान तरीका मैन्युअल रूप से दो (गिटलैब और अन्य) भंडार में धक्का देना शामिल है, लेकिन यह समय लेने वाली और त्रुटि प्रवण है।

सबसे बड़ी समस्या यह है कि एक दर्पण पुन: सिंक्रनाइज़ कर सकता है, दो उपयोगकर्ता एक साथ दो अलग-अलग भंडारों में परिवर्तन को धक्का देते हैं। इस मुद्दे को रोकने के लिए मैं सबसे अच्छी विधि का सामना कर सकता हूं यह सुनिश्चित करना है कि उपयोगकर्ता केवल एक संग्रह को धक्का दे सकें।

+0

इस पर अनुरोध किया गया है: http://feedback.gitlab.com/forums/176466-general/suggestions/4614663-automatic-push-to-remote-mirror-repo-after-push-to जाओ और इसे ऊपर उठाएं । –

उत्तर

15

दिसंबर 2016 अपडेट करें: मिररिंग गिटलाब ईई 8.2+ के साथ suported है: "Repository mirroring" देखें।

रूप Xiaodong Qi द्वारा टिप्पणी की:

इस उत्तर किसी भी कमांड लाइन का उपयोग किए बिना सरल किया जा सकता है (बस इसे सेट अप Gitlab रेपो प्रबंधन इंटरफ़ेस पर)


मूल जवाब (जनवरी 2013)

यदि आपका रिमोट मिरर रेपो bare repo है, तो आप अपने गिटला में पोस्ट-प्राप्त हुक जोड़ सकते हैं बी-प्रबंधित रेपो, और इसमें अपने रिमोट रेपो को धक्का दें।

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

Gitolite के रूप में (Gitlab द्वारा प्रयुक्त) mentions:

आप केवल कुछ विशिष्ट खजाने में एक हुक स्थापित करना चाहते हैं, यह सीधे सर्वर पर है।

में होगा जो:

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

चेतावनी (अपडेट Ocotober 2014) बाहर in the comments

Ciro Santilli अंक:

आज (Q4 2014) इस वसीयत असफल बी पारिस्थितिक गिटलैब स्वचालित रूप से github.com/gitlabhq/gitlab-shell/tree/... को प्रत्येक संग्रह में प्रबंधित करता है।
तो यदि आप यह परिवर्तन करते हैं, तो आपके द्वारा संशोधित प्रत्येक रिपोजिटरी को धक्का देने का प्रयास किया जाएगा।
gitlab-shell को अपग्रेड करते समय संभावित संघर्षों का उल्लेख न करें, और वर्तमान स्क्रिप्ट एक रूबी स्क्रिप्ट है, बैश नहीं है (और आपको इसे हटा नहीं देना चाहिए!)।

आप वर्तमान निर्देशिका नाम पढ़ने और कि और दूरदराज के बीच द्विभाजन सुनिश्चित करने के द्वारा इसे ठीक कर सकता है, लेकिन मेरा सुझाव है लोग उन चीजों

सी (और के लिए वोट) feeadback "Automatic push to remote mirror repo after push to GitLab Repo" से दूर दूर तक रहने के लिए।


अद्यतन जुलाई 2016: मैं देख रहा हूँ सुविधा के इस प्रकार GitLab ईई (एंटरप्राइज़ संस्करण) के लिए कहा: MR 249

  • मिरर भंडार सेटिंग के तहत दूरस्थ धक्का URL दर्ज करने की क्षमता जोड़े
  • कार्यान्वयन कोड जोड़ें रिमोट रिपोजिटरी को धक्का देने के लिए
  • नया पृष्ठभूमि कार्यकर्ता जोड़ें
  • नवीनतम अद्यतन दिनांक दिखाएं और यदि वे मौजूद हैं तो त्रुटियों को सिंक करें।
  • हर घंटे दूरस्थ दर्पण सिंक करें।

ध्यान दें कि हाल ही में Remote Mirror Repository (issues 17940) मुश्किल हो सकता है:

मैं वर्तमान में मेरी कंपनी GitHub से दोषरहित जीएमबीएच (https://www.npmjs.com/~lossless) का ओपन सोर्स NPM मॉड्यूल के मुख्य विकास शिफ्ट करने के लिए कोशिश कर रहा हूँ। GitLab.com

को कॉम

मैं GitHub से सभी रेपोस का आयात कर रहा हूँ, फिर भी मैं कह रहा कोई त्रुटि मिलती है जब मैं मूल GitHub यूआरएल के साथ Mirror Repository बंद और Remote Mirror Repository पर स्विच करने का प्रयास:

Remote mirrors url is already in use 

यहाँ रेपोस इस के साथ विफल रहता है में से एक है:

  • को निष्क्रिय मिरर भंडार
  • : https://gitlab.com/pushrocks/npmts संपादित 2 महीने पहले

    पता चला है, यह सिर्फ कई चरणों की आवश्यकता है

  • दबाएं
  • यूआरएल
  • को हटाएं
  • प्रेस बचाने
  • तो रिमोट मिरर
+1

रिमोट रेपो उपलब्ध नहीं होने पर इस सेटअप में क्या होता है, उदा। रखरखाव या नेटवर्क hickups के कारण? मुझे लगता है कि या तो gitlab repo को धक्का देना संभव नहीं होगा, या रिमोट रेपो में धक्का दिया जाएगा? – jfrantzius

+2

उत्तरार्द्ध @jfrantzius: आपके काम अभी भी आपके गिटलैब रेपो पर धकेल दिए जाएंगे, लेकिन यह दास को नहीं बनायेगा। – VonC

+0

आज यह विफल हो जाएगा क्योंकि गिटलैब स्वचालित रूप से प्रबंधित होने वाले प्रत्येक संग्रह में https://github.com/gitlabhq/gitlab-shell/tree/7eb45672b77a0337e6568ef64cd84e13027f2d7b/hooks को सिमलिंक करता है। इसलिए यदि आप यह परिवर्तन करते हैं, तो आपके द्वारा संशोधित प्रत्येक रिपोजिटरी को धक्का देने का प्रयास किया जाएगा। गिटलैब-शैल को अपग्रेड करते समय संभावित संघर्षों का उल्लेख न करें, और वर्तमान स्क्रिप्ट एक रूबी स्क्रिप्ट है, बैश नहीं है (और आपको इसे हटा नहीं देना चाहिए!)। आप वर्तमान निर्देशिका नाम पढ़कर और उस रिमोट के बीच विभाजन सुनिश्चित करके इसे सही कर सकते हैं, लेकिन मैं लोगों को उन चीज़ों से बहुत दूर रहने की सलाह देता हूं। –

1

आप कुछ प्रतिबद्धताओं के बाद चलने वाली स्क्रिप्ट को अनुकूलित करने के लिए हुक का उपयोग कर सकते हैं। इसके साथ आप नए बदलाव को दूसरे भंडार में भेज सकते हैं। निम्नलिखित पृष्ठ में हुक के बारे में अधिक जानकारी के लिए देखें: http://git-scm.com/book/en/Customizing-Git-Git-Hooks

3

जोड़ने मैं भी एपीआई (ज्यादातर परियोजना निर्माण केवल पर इस्तेमाल किया एपीआई) के माध्यम से GitLab 6 में खजाने को प्रतिबिंबित करने का प्रोजेक्ट बनाया।

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

3

सबसे अच्छा विकल्प आज GitLab सीआई का प्रयोग है। यह अनिवार्य रूप से वेबहुक के लिए एक पहले से लागू सर्वर है, जो स्वचालित रूप से आपके लिए क्लोन करता है और चलिए आप मनमाने ढंग से खोल कमांड चलाते हैं: आपको बस इतना करना है कि उसे धक्का देना है।

services कोई अच्छा विकल्प है यदि कोई उन्हें लागू करता है: वे स्रोत पेड़ में रहते हैं, एक ही धक्का करेंगे, और अतिरिक्त तैनाती ओवरहेड की आवश्यकता नहीं है।

कुंजी कार्यान्वयन कठिनाई अब पुश क्रेडेंशियल्स को सुरक्षित रूप से कैसे स्टोर करें: संभवतः गिटहब के लिए सबसे अच्छा विकल्प किसी कुंजी को प्राप्त करना है (सेवा के माध्यम से यूआई पर ओथ सही होगा) और उस सादे टेक्स्ट को स्टोर करें।

एक और विकल्प जो अभी जोड़ा गया है custom hooks है।

0

सबसे अच्छा विकल्प का उपयोग करने के बाद प्राप्त हुक नहीं है, लेकिन आदेशों कि rsync के माध्यम से समन्वयन तैनाती, Capistrano अगर आप रूबी की तरह उपयोग करते हुए, यदि आप जावास्क्रिप्ट (ग्रंट) पसंद करते हैं Shipit का उपयोग कर।

6

यदि आप अपने खुद के गिटलैब को होस्ट नहीं करते हैं, तो यह जानना उचित है कि GitLab.com ने बिना किसी कामकाज के सीधे इस सुविधा को पेश किया है। , स्वचालित रूप से दूरदराज के दर्पण की शाखाओं अद्यतन:

  1. एक परियोजना के भीतर से एक दूरस्थ भंडार
  2. चेकमार्क रिमोट दर्पण भंडार को मिरर भंडार
  3. स्क्रॉल चयन करने के लिए पुश करने के लिए नीचे गियर आइकन का उपयोग टैग, और हर घंटे इस भंडार से काम करता है।
  4. वह संग्रह दर्ज करें जिसे आप अपडेट करना चाहते हैं; GitHub के लिए कम से कम आप तो जैसे अपने यूज़रनेम और पासवर्ड URL में, शामिल कर सकते हैं: https://yourgithubusername:[email protected]/agaric/guts_discuss_resource.git

ध्यान दें कि यदि आप किसी दूरस्थ रिपोजिटरी से खींच रहे हैं, यह अभी भी पर यहां सेट दूरदराज के भंडार के लिए धक्का होगा। मैंने कोशिश नहीं की है, लेकिन आप एक ही भंडार से धक्का और खींचने में सक्षम होना चाहिए।

0

गिटलैब एंटरप्राइज़ संस्करण अब संस्करण 8.2 के रूप में भंडार मिररिंग का समर्थन करता है। इसे कॉन्फ़िगर करने के तरीके के बारे में जानकारी Repository Mirroring help topic में है।

संबंधित मुद्दे