सिंक में विभिन्न मेजबानों पर गिट रिपॉजिटरी रखते हैं


34

मैं एक छोटा प्रोजेक्ट शुरू करने के बारे में सोच रहा हूं और मैं इसका संस्करण जीआईटी के साथ बनाना चाहता हूं।

Bitbucket अपने मुफ्त प्लान के साथ मेरे लिए एक अच्छा विकल्प है। मैं इसे git के साथ काम करने के लिए मुख्य उपकरण के रूप में उपयोग करना चाहता हूं क्योंकि उनके पास एक वेब-इंटरफ़ेस, Mac OS क्लाइंट और इतने पर जैसे अच्छे उपकरण हैं। लेकिन, किसी भी आकस्मिक क्षति से उच्च सुरक्षा प्राप्त करने के लिए जो तृतीय-पक्ष सेवा का उपयोग करने के कारण हो सकती है, मैं अपने एनएएस पर रिपॉजिटरी की दूसरी बैक-अप कॉपी के रूप में गिट स्थापित करना चाहता हूं।

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

और क्या एक मौजूदा रिपॉजिटरी को पूरे इतिहास के साथ दूसरे गिट-सर्विस में आयात करने का एक तरीका है?


मुझे लगता है कि मिररिंग की मुझे जरूरत है। यह लेख वास्तव में मेरी आवश्यकता का वर्णन करने के लिए लगता है। और यह एक भी।

मुझे विश्वास है कि यह पूर्ण इतिहास के साथ पूर्ण प्रतिलिपि बनाएगा और यहां तक ​​कि स्वचालित रूप से दोनों मेजबानों पर रिपॉजिटरी के लिए स्वचालित रूप से नए संस्करण बना देगा।

क्या मैं सही हू?


मैं xpdev का उपयोग कर रहा हूँ, मुझे आश्चर्य है कि आपके 2 सिस्टम की स्थिति में bennefit आपके मामले में मनोरंजक git का होगा। बस हर अंतिम निर्माण से सुनिश्चित होने के लिए मैं एक USB बैकअप बनाते हैं। लेकिन मूल रूप से वर्जनिंग को व्हाइटिन xpdev द्वारा संभाला जाता है ताकि इसकी वास्तविक आवश्यकता न हो। BTW यदि आप एक मूर्ख सबूत NASS Raid1 के मालिक हैं या इसलिए आप अपने स्वयं के संस्करण सिस्टम चलाने पर विचार कर सकते हैं तो कुछ मुफ्त भी हैं
user613326

लेकिन मैं चाहता हूं कि 2 जगहों पर पूर्ण संस्करण उपलब्ध हो। यदि तृतीय-पक्ष होस्टिंग की मृत्यु हो जाती है, या कंपनी, इसे चला रही है, बस गायब हो जाता है, तो मैं बिल्कुल वैसा ही अनुभव अभी भी सभी संस्करण इतिहास के साथ करना चाहता हूं ...
बार्ट्नज़ाज़

इसका मतलब है कि मेरे पास 99.9% सुरक्षा के लिए एनएएस पर आराम और पकड़ के लिए बिटबकेट होगा।
बार्टॉनाज़

जैसा कि xp-dev के लिए इसकी संभावना नहीं है कि इस तरह की कंपनी की मृत्यु हो जाती है, वे कोड होस्टिंग योजनाओं, कीमतों आदि को बदल सकते हैं या किसी अन्य कंपनी के साथ विलय कर सकते हैं। लेकिन यह उनके लिए एक पैसे का दूध है। और वे मूल्यवान डेटा का बैकअप भी लेंगे। इसकी जगह उनका व्यवसाय बना रहा। मैं इसे 3 डेवलपर्स के साथ उपयोग करता हूं, और हमारा कोड 5 अलग-अलग मशीनों में मौजूद है, जहां हमेशा एक स्थानीय स्रोत की प्रतिलिपि होती है जो xp देव में सिंक हो जाती है। यदि आपके पास केवल कुछ प्रोजेक्ट हैं, तो XP देव मुफ़्त है।
user613326

1
बेशक, यह संभावना नहीं है। लेकिन फिर भी, आप कभी भी 100% निश्चित नहीं हो सकते ...
बार्टोनाज़

जवाबों:


19

हाँ, यह बिल्कुल DVCS की खूबसूरती है जैसे कि गिट। आप एक ही स्थिति के साथ बिटबकेट या गीथूब के रूप में विभिन्न रिपॉजिट की किसी भी संख्या का उपयोग कर सकते हैं।

यहां तक ​​कि आप स्थानीय प्रतिलिपि (आपके कंप्यूटर पर भंडार) आमतौर पर रिमोट रेपो का एक पूर्ण क्लोन है।

सिंक में कई रिपोज को रखने के लिए आपको केवल एक चीज (आमतौर पर मूल या अपस्ट्रीम) के लिए खींच रहा है और बैकअप प्रतियों पर धकेल रहा है।


11
दुर्भाग्य से सब उतना चमकदार नहीं है। केडीई निकट आपदा के सावधानी बरतें । यही है, सुनिश्चित करें कि बैकअप उन चीज़ों (शाखाओं, रिपॉजिटरी, आदि) को नहीं हटाता है जो बैक अप सर्वर पर हटाए गए थे।
Jan Hudec

मुझे अभी भी यकीन नहीं है कि मैं इसे सही तरीके से समझ पाऊंगा। जहां तक ​​मैं समझता हूं, धक्का देना और खींचना एक निश्चित संस्करण के साथ काम करता है। लेकिन मान लीजिए कि मेरे पास अपने काम करने वाली मशीन पर कोड का एक हालिया संस्करण है। मेरे पास दूरस्थ होस्ट (बिटबकेट, जीथब, या कुछ और) पर गिट रिपॉजिटरी है, जिसमें कोड के विकास का पूरा इतिहास है, जो मेरे पास काम करने वाली मशीन (यदि यह प्रतिबद्ध था) पर है। और मेरे पास NAS पर एक भंडार है जो खाली है। क्या मैं रिमोट होस्ट से कोड का पूरा इतिहास अपने एनएएस में आयात कर सकता हूं ताकि मेरे पास दो जगहों पर दो समान रिपोजिटरी हों, और कैसे?
बार्टोनाज़

2
दूरस्थ रिपॉजिटरी को क्लोन करें, फिर सभी अपडेट (सभी शाखाओं) को नियमित अंतराल में खींचें। एक git क्लोन में इतिहास होता है, यह svn चेकआउट की तरह नहीं होता है जिसमें केवल नवीनतम संस्करण होता है।
विल्बर्ट

11

इस समस्या के लिए एक परीक्षण किया गया समाधान है: स्वचालित सिंक 2 रिमोट गिट रिपोजिटरी

2 दूरस्थ गिट रिपॉजिटरी को सिंक करने के लिए एक सरल स्क्रिप्ट

मैंने एक सरल स्क्रिप्ट के लिए वेब खोजा है जो सिंक करेगा। 2 रिमोट रिपॉजिटरी लेकिन मुझे ऐसी स्क्रिप्ट भी नहीं मिली, जिससे कई लोग इसे देख सकें! इसलिए मैंने 2 सरल परीक्षण रिपोजिटरी बनाई हैं और ऐसी स्क्रिप्ट का परीक्षण और निर्माण शुरू किया है।

ऐसी स्क्रिप्ट को क्या करना चाहिए?

खैर, सामान्य तौर पर, इसे करने के चरण सरल होते हैं: 1. पहला रिपॉजिटरी क्लोन करें। 1 दूसरे को अतिरिक्त रिमोट रिपॉजिटरी के रूप में जोड़ें। सभी को दूसरे रिपॉजिटरी में लाना है। 2 पर अपडेटेड स्थानीय रिपॉजिटरी को पुश करें। रिमोट रिपोजिटरी।

शेष मुद्दा यह है - उपरोक्त सभी git कमांड के लिए सही स्विच क्या हैं?

तो यहाँ यह है ...

2repos-sync.sh लिस्प लिपि

# Clear the folder first - please use this carefully
rm -rf $REPO_NAME  
# clone the reposotory
git clone --bare $ORIGIN_URL

# add a remote repository
cd $REPO_NAME
git remote add --mirror=fetch repo1 $REPO1_URL

# update the local copy from the first repository
git fetch origin --tags

# update the local copy with the second repository
git fetch repo1 --tags

# sync back the 2 repositories
git push origin --all
git push origin --tags
git push repo1 --all
git push repo1 --tags

नोट - यह स्क्रिप्ट भंडार सामग्री के बीच संघर्ष के मामलों को हल नहीं कर रही है!


आप अपने उत्तर में उल्लेख करना चाह सकते हैं कि आपके द्वारा किया गया पहला काम मौजूदा लोकल डायरेक्टरी को $ REPO_NAME से हटा देगा। यह महत्वपूर्ण लगता है और उन लोगों के लिए डेटा हानि को रोक सकता है जो केवल आपके समाधान की प्रतिलिपि बनाते हैं।
विल्बर्ट

इसके साथ जाने के लिए, LibGit2 इस तरह की चीज के लिए उपयोगी है।
रबरडैक

0

मैं अपने सभी रिपॉजिटरी को स्टोर करने के लिए एक निजी GitLab का उपयोग करता हूं, इसलिए मेरे पास केवल एक मूल है जिसे मैं धक्का देता हूं और खींचता हूं जबकि मैं दिन-प्रतिदिन विकास कर रहा हूं।

लेकिन, ओपन सोर्स प्रोजेक्ट्स के लिए, GitHub एक अधिक जीवंत समुदाय है, इसलिए, अगर मैं अपनी परियोजनाओं में सामुदायिक योगदान को स्वीकार करना चाहता हूं, तो मैं अपने द्वारा चलाए जा रहे सर्वर को पिंग करने के लिए वेब GitLab के वेब हुक सिस्टम का उपयोग करता हूं जो कि GitHub में मेरे सार्वजनिक रिपॉजिट को अपडेट करता है।

यह मुझे GitHub का इलाज करने की अनुमति देता है जब मैं किसी अन्य योगदानकर्ता से खींच सकता हूं - तब मैं स्थानीय रूप से विलय कर सकता हूं - और यह भी कि मेरे सभी प्राथमिक और सार्वजनिक रिपॉजिटरी परिवर्तनों को कैसे वितरित करते हैं, इसका एक प्रवाह है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.