git कैसे सुनिश्चित करें कि मेरा जीआईटी रेपो कोड सुरक्षित है?




backup dvcs (7)

आप डेवलपर घरेलू निर्देशिका स्थानीय नेटवर्क पर दूरस्थ डिवाइस माउंट कर सकते हैं। तो आपको केवल नेटवर्क संग्रहण सुरक्षित बनाने के बारे में चिंता करने की आवश्यकता है। या हो सकता है कि आप अपने स्थानीय रेपो की नकल को कहीं और प्रतिलिपि बनाने के लिए ड्रॉपबॉक्स जैसी कुछ चीजों का उपयोग कर सकते हैं।

https://code.i-harness.com

अगर हमारे संगठन को केंद्रीय सर्वर VCS जैसे विघटित वीसीएस जैसे जीआईटी से स्विच करना था, तो मैं यह कैसे सुनिश्चित कर सकता हूं कि मेरा पूरा कोड हार्डवेयर विफलता से सुरक्षित है?

सेंट्रल-सर्वर VCS के साथ मुझे हर दिन रिपॉजिटरी को बैकअप लेने की आवश्यकता होती है। अगर हम एक डीवीसी का प्रयोग कर रहे थे, तो सभी डेवलपर मशीनों पर कोड शाखाएं होंगी, और अगर वह हार्डवेयर असफल हो (या एक देव को अपना लैपटॉप खोना है या चोरी हो गया है) तो हमारे पास कोई बैकअप नहीं होगा ।

ध्यान दें कि मैं इसे "डेवलपर्स को किसी सर्वर पर शाखाओं की शाखाओं को पुश करने के लिए एक अच्छा विकल्प नहीं मानता" - यह थकाऊ है और डेवलपर्स इसे समाप्त नहीं करेंगे

क्या इस समस्या के चारों ओर एक आम तरीका है?

कुछ स्पष्टीकरण:

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

अगर हम DVCS का उपयोग कर रहे हैं तो डेवलपर एक स्थानीय शाखा (और वास्तव में कई स्थानीय शाखाएं) कर सकता है। उन शाखाओं में से कोई भी केंद्रीय सर्वर पर नहीं है और बैकअप के लिए उपलब्ध है, जब तक कि डेवलपर सोचता नहीं कि "ओह, मुझे इसे केंद्रीय सर्वर तक पहुंचा" चाहिए।

तो अंतर मुझे देख रहा है (अगर मुझे ग़लत हो तो मुझे सही करें!): अगर हम एक डीवीसीएस का उपयोग कर रहे हैं, लेकिन एक सामान्य वीसीएस के साथ हैं तो आधे-कार्यान्वित विशेषताओं और बगफिक्स शायद बैकअप के लिए केंद्रीय सर्वर पर उपलब्ध नहीं होंगे। मैं उस कोड को सुरक्षित कैसे रखूं?


आपकी टीम के सभी डेवलपर्स के पास सर्वर पर अपनी शाखाएं भी हो सकती हैं (प्रति टिकट या केवल प्रति डेवेल आदि)। इस तरह वे मास्टर ब्रान्च में निर्माण को तोड़ नहीं सकते हैं, लेकिन वे अभी भी अपने काम को सर्वर पर प्रगति में डालते हैं जो बैक अप हो जाता है।

मेरे खुद के git_remote_branch उपकरण उस तरह के कार्यप्रवाह के लिए उपयोगी हो सकते हैं (ध्यान दें कि इसे रूबी की आवश्यकता है)। इससे दूरदराज के शाखाओं में हेरफेर करने में मदद मिलती है

एक साइड नोट के रूप में, रेपो सुरक्षा के बारे में बात करते हुए, अपने सर्वर पर आप एक पोस्ट-कट हुक सेट कर सकते हैं जो कि एक साधारण जीआईटी क्लोन या जीआईटी एक और मशीन को धकेलती है ... आप प्रत्येक कमिट के बाद अद्यतित बैकअप लेते हैं!


मुझे यह सवाल थोड़ा विचित्र लगता है। मान लें कि आप एक गैर-वितरित संस्करण नियंत्रण प्रणाली का उपयोग कर रहे हैं, जैसे कि सीवीएस, आपके पास सेंट्रल सर्वर पर एक रिपॉजिटरी होगा और डेवलपर के सर्वरों पर कार्य प्रगति करेगा आप रिपॉजिटरी का बैक अप कैसे करते हैं? प्रगति में डेवलपर्स के काम का बैक अप कैसे करें? उन सवालों के जवाब ठीक है कि आपको अपने प्रश्न को संभालने के लिए क्या करना है।

वितरित संस्करण नियंत्रण का उपयोग करना, डेवलपर्स के सर्वर पर रिपॉजिटरी अभी प्रगति पर काम कर रहे हैं क्या आप इसे वापस करना चाहते हैं? फिर इसे वापस करो! यह इतना सरल है।

हमारे पास एक स्वचालित बैकअप सिस्टम है जो हमारी हमारी मशीनों से किसी भी निर्देशिका को पकड़ लेता है जो हम निर्दिष्ट करते हैं, इसलिए मैं किसी भी रिपॉजिटरीज को जोड़ता हूं और मेरी मशीन पर काम की प्रतियां उस आखिरी, जीआईटी और सीवीएस रिपॉजिटरी दोनों के साथ जोड़ता हूं।

वैसे, यदि आप किसी उत्पाद को रिलीज़ करने वाले किसी कंपनी में वितरित संस्करण नियंत्रण का उपयोग कर रहे हैं, तो आपके पास एक केंद्रीय भंडार होगा। यह वह है जो आप से रिलीज करते हैं यह एक विशेष सर्वर पर नहीं हो सकता है; यह कुछ डेवलपर की हार्ड ड्राइव पर हो सकता है लेकिन आप जिस रिपॉजिटरी को छोड़ते हैं वह केंद्रीय भंडार है (मुझे लगता है अगर आपने रिलीज़ नहीं किया है, फिर भी, आपके पास अभी तक एक नहीं हो सकता है।) मुझे लगता है कि सभी परियोजनाओं में एक या एक से अधिक केंद्रीय खजाने हैं (और वास्तव में यदि उनमें एक से अधिक है, तो यह दो परियोजनाएं हैं और एक एक कांटा है।) यह ओपन सोर्स के लिए भी जाता है

यहां तक ​​कि अगर आपके पास कोई केंद्रीय भंडार न हो, तो समाधान एक ही है: डेवलपर की मशीनों पर बैक अप काम आपको ऐसा करना चाहिए था कि वैसे भी। तथ्य यह है कि सीवीएस की कामकाजी प्रतियां या सीधा गैर-संदर्भित निर्देशिकाओं की बजाय काम प्रगति पर वितरित रिपॉजिटरी में है।


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

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

एक बार जब आप एक केंद्रीय भंडार स्थापित कर लेते हैं तो आप चेक-इन और अपडेट करने के लिए सीवीएस / एसवीएन शैली वर्कफ़्लो का उपयोग कर सकते हैं। सीवीएस अपडेट गिट फ़ेच हो जाता है और रिबेट हो जाता है अगर आपके पास स्थानीय परिवर्तन हो या सिर्फ अगर आप नहीं करते हैं तो खींचें। cvs प्रतिबद्ध git कमिट और git धक्का हो जाता है

इस सेटअप के साथ आप पूरी तरह से केंद्रीकृत वीसीएस सिस्टम के साथ समान स्थिति में हैं। एक बार डेवलपर्स अपने बदलाव (जीआईटी धक्का) सबमिट करते हैं, जो उन्हें बाकी टीम को दिखाई देने की आवश्यकता होती है, वे केंद्रीय सर्वर पर होते हैं और इसका समर्थन किया जाएगा।

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

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

दूसरी ओर, स्थानीय कमिट का उपयोग एक लाभ के रूप में किया जा सकता है सभी स्थानीय कमानों को केंद्रीय भंडार पर एक सुरक्षित स्थान पर धकेलना बहुत मुश्किल नहीं होना चाहिए। स्थानीय शाखाएं एक डेवलपर विशिष्ट टैग नामस्थान में संग्रहीत की जा सकती हैं।

उदाहरण के लिए, जो ब्लॉग्स के लिए, उनके स्थानीय भंडार में एक उपनाम दिया जा सकता है (जैसे) git mybackup जवाब में निम्नलिखित की तरह कुछ करने के लिए

git push origin +refs/heads/*:refs/jbloggs/*

यह एक ऐसी कमान है जिसका उपयोग किसी भी समय (जैसे दिन के अंत) में किया जा सकता है, यह सुनिश्चित करने के लिए कि उनके सभी स्थानीय परिवर्तन सुरक्षित रूप से समर्थित हैं

यह सभी प्रकार की आपदाओं के साथ मदद करता है जो मशीन चलती है और वह एक और मशीन का उपयोग कर सकता है और लाया जाता है, उसे बचाया जाता है और वह कहाँ से निकलता है उसे आगे बढ़ाता है। जो बीमार है? फ्रेड जो की शाखाओं को पकड़ने के लिए ले सकता है कि वह 'तय' करना चाहिए जो उसने कल किया था लेकिन मास्टर के खिलाफ परीक्षण करने का कोई मौका नहीं था।

मूल प्रश्न पर वापस जाने के लिए क्या डीवीसीएस और केंद्रीकृत वीसीएस के बीच अंतर होना चाहिए? आप कहते हैं कि आधे-कार्यात्मक सुविधाओं और बग फिक्स डीवीसीएस के मामले में केंद्रीय भंडार पर समाप्त नहीं होंगे लेकिन मैं यह तर्क दूंगा कि इसमें कोई अंतर नहीं होना चाहिए।

मैंने कई मामलों को देखा है, जहां एक अर्ध-कार्यान्वयन सुविधा एक डेवलपर के कामकाजी बॉक्स पर रहता है, जब केंद्रीकृत वीसीएस का इस्तेमाल होता है। यह या तो एक नीति लेता है जो आधे लिखित सुविधाओं को मुख्य धारा में चेक की अनुमति देता है या केंद्रीय शाखा बनाने के लिए निर्णय किया जाना है

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


मुझे लगता है कि यह एक भ्रम है कि वितरित VCS का उपयोग करना जरूरी है कि इसका उपयोग पूरी तरह से वितरित फैशन में करना चाहिए यह आम जीआईटी भंडार स्थापित करने के लिए पूरी तरह से मान्य है और सभी को बताता है कि रिपॉजिटरी आधिकारिक है सामान्य विकास वर्कफ़्लो के लिए, डेवलपर्स आम रिपॉजिटरी से बदलाव लाएंगे और अपने स्वयं के रिपॉजिटरी अपडेट करेंगे। केवल दो डेवलपर्स के मामले में सक्रिय रूप से एक विशिष्ट सुविधा पर सहयोग करने के लिए उन्हें एक-दूसरे से परिवर्तन सीधे खींचने की आवश्यकता हो सकती है।

किसी प्रोजेक्ट पर काम करने वाले कुछ डेवलपरों के साथ, किसी और के बदलावों को हटाने के लिए याद रखना बहुत गंभीरता से होगा यदि आपके पास केंद्रीय भंडार नहीं था तो आप क्या करेंगे?

काम पर हमारे पास एक बैकअप समाधान है जो हर रोज़ की कामकाजी डायरेक्टरी का बैक अप लेता है, और पूरी तरह से एक डीवीडी साप्ताहिक लिखता है। इसलिए, हालांकि हमारे पास एक केंद्रीय भंडार है, लेकिन प्रत्येक व्यक्ति का भी समर्थन किया जाता है


यह DVCS में एक प्राधिकरण के रूप में एक "केंद्रीय" सर्वर का उपयोग करने के लिए असामान्य नहीं है, जो आपको अपना बैकअप करने का स्थान भी प्रदान करता है


हम व्यक्तिगत डेवलपर्स को बैकअप के लिए rsync का उपयोग करते हैं। सर्वर पर निर्देशिका में निर्देशिकाओं को गिटेट करें। यह गिट क्लोन के आसपास आवरण स्क्रिप्ट का उपयोग करके सेटअप है, और पोस्ट-कट आदि। हुक

चूंकि यह पोस्ट- * हुक में किया जाता है, डेवलपर्स को स्वयं को मैन्युअल रूप से याद रखने की आवश्यकता नहीं होती है। और क्योंकि हम समय समाप्ति के साथ rsync का उपयोग करते हैं, यदि सर्वर नीचे जाता है या उपयोगकर्ता दूरस्थ रूप से काम कर रहा है, तो वे अभी भी काम कर सकते हैं।





dvcs