क्या सभी शाखाओं और टैगों सहित संपूर्ण गिट रेपो का बैकअप लेने का एक सरल तरीका है?
क्या सभी शाखाओं और टैगों सहित संपूर्ण गिट रेपो का बैकअप लेने का एक सरल तरीका है?
जवाबों:
इसके बारे में सिर्फ एक क्लोन बनाने के लिए क्या?
git clone --mirror other/repo.git
हर रिपॉजिटरी अपने रिमोट का एक बैकअप है।
git branch -a। शायद यह इस तरह से अधिक स्पष्ट है: एक रिपॉजिटरी को क्लोन करने के बाद आप हर शाखा को नहीं लाते हैं, आप हर प्रतिबद्धता को प्राप्त करते हैं। शाखाएँ केवल एक मौजूदा प्रतिबद्ध का संदर्भ देती हैं।
git cloneवह सब कवर करता है। (1) वैकल्पिक है, आवश्यकता नहीं है। यदि परिणाम अभी भी अनुकूलित है, तो यह अभी भी एक बैकअप है (2) पहले से ही गिट द्वारा कवर किया गया है। - मैं जो बिंदु देना चाहूंगा, वह यह है कि यदि आपको git cloneपहले से ही एक अलग टूल की जरूरत है, तो संबंधित बिंदुओं को कवर करें? हालांकि मैं यह भी पसंद करता git bundleहूं कि मुझे नहीं लगता कि मेरा जवाब गलत है, या अमान्य है। आप हॉट-बनाम कोल्ड-बैकअप के रूप में दोनों दृष्टिकोण देख सकते हैं।
git bundle
मुझे वह तरीका पसंद है, क्योंकि इसके परिणामस्वरूप केवल एक फ़ाइल होती है, जिसे कॉपी करना आसान होता है। प्रोगिट
देखें : आनंद का छोटा बंडल ।
यह भी देखें कि " मैं किसी को गिट रिपॉजिटरी कैसे ईमेल कर सकता हूं? ", जहां कमांड है
git bundle create /tmp/foo-all --all
विस्तृत है:
git bundleकेवल उन संदर्भों को पैकेज करेगा जो git शो-रेफ द्वारा दिखाए जाते हैं : इसमें हेड, टैग और रिमोट हेड शामिल हैं।
यह बहुत महत्वपूर्ण है कि गंतव्य के आधार का उपयोग किया जाए।
यह सावधानी के साथ ठीक करने के लिए ठीक है, जिससे बंडल फ़ाइल गंतव्य में पहले से ही ऑब्जेक्ट्स को समाहित कर लेती है, क्योंकि गंतव्य पर अनपैक करते समय इन पर ध्यान नहीं दिया जाता है।
उस बंडल का उपयोग करने के लिए, आप इसे क्लोन कर सकते हैं, एक गैर-मौजूद फ़ोल्डर निर्दिष्ट कर सकते हैं (किसी भी गिट रेपो के बाहर):
git clone /tmp/foo-all newFolder
git bundleमेरी राय पर सही उत्तर है, और स्वीकृत नहीं है। मुझे लगता है कि वह क्लोन कमांड को अच्छी तरह से जानता है, अगर वह ऐसा सवाल पूछ सकता है, और यह स्पष्ट रूप से उसके लिए पर्याप्त नहीं है (क्योंकि यह एक क्लोन है, और डंप नहीं है)। डंप अलग-अलग चीजें हैं सरल प्रतियां, उदाहरण के लिए: 1) उन्हें सामान्य काम के लिए इष्टतम (या यहां तक कि सक्षम) होने की आवश्यकता नहीं है) लेकिन उन्हें डेटा भ्रष्टाचार 3 के खिलाफ एक अच्छा प्रतिरोध और मरम्मत करने की आवश्यकता है) यह अक्सर उपयोगी होता है अगर वे आसानी से वृद्धिशील बैकअप के लिए सक्षम हैं, जबकि यह प्रतियों पर एक लक्ष्य नहीं है।
git bundleया git cloneहो जाता है सब कुछ , उदाहरण के लिए हुक लिपियों।
git bundleरिमोट रेपो के खिलाफ इस्तेमाल कर सकता हूं ?
कुछ अन्य उत्तरों पर विस्तार करते हुए, यही मैं करता हूँ:
रेपो सेट करें: git clone --mirror user@server:/url-to-repo.git
फिर जब आप बैकअप को रिफ्रेश करना चाहते हैं: git remote updateक्लोन लोकेशन से।
यह उन सभी शाखाओं और टैगों का समर्थन करता है, जिनमें नए शामिल हैं जो बाद में जुड़ जाते हैं, हालांकि यह ध्यान देने योग्य है कि जो शाखाएं हटा दी जाती हैं वे क्लोन से नष्ट नहीं होती हैं (जो बैकअप के लिए अच्छी बात हो सकती हैं)।
यह परमाणु है इसलिए इसमें समस्याएं नहीं हैं जो एक सरल प्रतिलिपि होगी।
Http://www.garron.me/en/bits/backup-git-bare-repo.html देखें
KingCrunch और VonC द्वारा शानदार उत्तरों पर विस्तार
मैंने उन दोनों को मिला दिया:
git clone --mirror git@some.origin/reponame reponame.git
cd reponame.git
git bundle create reponame.bundle --all
उसके बाद आपके पास एक फाइल होती है जिसे reponame.bundleआसानी से कॉपी किया जा सकता है। फिर आप उस उपयोग से एक नया सामान्य गिट रिपॉजिटरी बना सकते हैं git clone reponame.bundle reponame।
ध्यान दें कि git bundleकेवल प्रतियाँ हैं जो भंडार में कुछ संदर्भ (शाखा या टैग) को ले जाती हैं। इसलिए टेंगलिंग कम्यूट बंडल के लिए संग्रहीत नहीं हैं।
git bundle create reponame.bundle --all?
सब कुछ .gitनिर्देशिका में निहित है । जैसा कि आप किसी भी फ़ाइल के साथ अपने प्रोजेक्ट के साथ ही वापस करेंगे।
copyया cpबहुत अच्छी तरह से आज्ञा देता है और यह उसकी जरूरतों के अनुरूप नहीं है। और मुझे भी लगता है, वह एक नंगे भंडार पर सोचता है (हालाँकि इसे कॉपी भी किया जा सकता है, मुझे लगता है कि यह पूर्ण रूप से बैकअप नहीं है)।
git बंडल, या क्लोन का उपयोग करें
git डायरेक्टरी को कॉपी करना एक अच्छा समाधान नहीं है क्योंकि यह परमाणु नहीं है। यदि आपके पास एक बड़ी रिपॉजिटरी है, जिसे कॉपी करने में लंबा समय लगता है और कोई आपकी रिपॉजिटरी में धकेलता है, तो यह आपकी बैक को प्रभावित करेगा। क्लोनिंग या बंडल बनाने से यह समस्या नहीं होगी।
आप न्यूनतम स्टोरेज साइज़ पर git-copy के साथ git रेपो का बैकअप ले सकते हैं ।
git copy /path/to/project /backup/project.repo.backup
तब आप के साथ अपने प्रोजेक्ट को पुनर्स्थापित कर सकते हैं git clone
git clone /backup/project.repo.backup project
git clone --bare+ के लिए बहुत काम लगता है git push --force।
सही उत्तर IMO है git clone --mirror । यह आपके रेपो का पूरी तरह से बैकअप लेगा।
Git क्लोन मिरर पूरे रिपॉजिटरी, नोट्स, हेड्स, रेफ्स इत्यादि को क्लोन करेगा और आम तौर पर एक नए git सर्वर के लिए संपूर्ण रिपॉजिटरी को कॉपी करने के लिए उपयोग किया जाता है। यह एक सभी शाखाओं और सब कुछ, पूरे भंडार को नीचे खींच देगा ।
git clone --mirror git@example.com/your-repo.git
आम तौर पर एक रेपो क्लोनिंग में सभी शाखाएं शामिल नहीं होती हैं, केवल मास्टर।
रेपो फोल्डर को कॉपी करने से केवल उन शाखाओं को "कॉपी" किया जाएगा जिन्हें अंदर खींचा गया है ... इसलिए डिफ़ॉल्ट रूप से केवल मास्टर शाखा या अन्य शाखाएं जिन्हें आपने पहले चेक-आउट किया है।
Git बंडल कमांड भी वह नहीं है जो आप चाहते हैं: "बंडल कमांड उन सभी चीजों का पैकेज करेगा जो सामान्य रूप से एक git पुश कमांड के साथ एक बाइनरी फ़ाइल में वायर पर धकेल दिए जाएंगे जिसे आप किसी को ईमेल कर सकते हैं या फ्लैश ड्राइव पर डाल सकते हैं, फिर एक और रिपॉजिटरी में असंबद्ध। " ( Git क्लोन - मिरर और git क्लोन --bare के बीच अंतर क्या है )
यह थ्रेड कुछ अंतर्दृष्टि प्राप्त करने में बहुत मददगार था कि git repos का बैकअप कैसे किया जा सकता है। मुझे लगता है कि अभी भी अपने आप के लिए "सही तरीका" (tm) खोजने के लिए कुछ संकेत, जानकारी या निष्कर्ष का अभाव है। इसलिए दूसरों की मदद करने के लिए अपने विचारों को यहाँ साझा करना और उन्हें बढ़ाने के लिए चर्चाओं के लिए रखा। धन्यवाद।
तो मूल प्रश्न को उठाकर शुरू करना:
फिर इसे विशिष्ट इच्छाओं के साथ समृद्ध करना और कुछ नुस्खे निर्दिष्ट करना:
देखने का बिंदु यह है कि "100%" बैकअप क्या है। यहाँ दो विशिष्ट हैं।
git एक डेवलपर टूल है और इस बिंदु को git clone --mirrorऔर के माध्यम से देखने का समर्थन करता है git bundle --all।
git gc)git एक डेवलपर टूल है और इसे एडमिन को छोड़ देता है। Git कॉन्फ़िगरेशन और OS कॉन्फ़िगरेशन के बैकअप को सामग्री के बैकअप से अलग करके देखा जाना चाहिए।
उनमें से अधिकांश बैकअप के लिए सामान्य हैं।
git gc --auto
git bundle --all
git bundle verify।git clone --mirror
git fsck।एक कोल्ड-कॉपी बैकअप हमेशा एक पूर्ण फ़ाइल बैकअप कर सकता है: git repos के सभी एक्सेस को अस्वीकार करें , बैकअप करें और फिर से एक्सेस की अनुमति दें।
ऑन-गोइंग कमिट्स द्वारा दूषित डेटा के जोखिम के कारण सक्रिय बैकअप के साथ फ़ाइल बैकअप नहीं किया जा सकता है। एक हॉट-कॉपी बैकअप प्रयोजनों के लिए एक सक्रिय भंडार का एक निश्चित राज्य प्रदान करता है। ऑन-गोइंग कमिट्स उस प्रति को प्रभावित नहीं करते हैं। जैसा कि git के क्लोन और बंडल फ़ंक्शंस से ऊपर सूचीबद्ध है, इसका समर्थन करते हैं, लेकिन "100% व्यवस्थापक" बैकअप के लिए कई चीजें अतिरिक्त कमांड के माध्यम से करनी पड़ती हैं।
git bundle --allसामग्री की पूर्ण / वृद्धिशील डंप फ़ाइलें बनाने के लिए उपयोग करें और कॉपी / बैकअप कॉन्फ़िगरेशन फ़ाइलों को अलग से।git clone --mirrorअलग से कॉन्फ़िगरेशन का उपयोग करें , संभाल और कॉपी करें, फिर दर्पण का पूर्ण फ़ाइल बैकअप करें।
cd /path/to/backupdir/
git clone /path/to/repo
cd /path/to/repo
git remote add backup /path/to/backupdir
git push --set-upstream backup master
यह एक बैकअप बनाता है और सेटअप बनाता है, ताकि आप अपने बैकअप को अपडेट करने के लिए एक git पुश कर सकें, कि आप क्या करना चाहते हैं। बस यह सुनिश्चित करें, कि / path / to / backupdir और / path / to / repo कम से कम अलग-अलग हार्ड ड्राइव हैं, अन्यथा यह ऐसा करने के लिए बहुत अधिक समझ में नहीं आता है।
यहाँ दो विकल्प हैं:
आप सीधे git रेपो डायरेक्टरी का एक टार ले सकते हैं क्योंकि इसमें रेपो की पूरी नंगी सामग्री सर्वर पर है। थोड़ी संभावना है कि कोई बैकअप लेते समय रेपो पर काम कर रहा हो।
निम्न कमांड आपको रेपो का नंगे क्लोन देगा (जैसा कि यह सर्वर में है), तो आप उस स्थान का एक टार ले सकते हैं जहां आपने बिना किसी समस्या के क्लोन किया है।
git clone --bare {your backup local repo} {new location where you want to clone}
जहाँ तक मुझे पता है आप सिर्फ उस निर्देशिका की एक प्रति बना सकते हैं जो आपके रेपो में है, बस!
cp -r project project-backup
git clone --bareआपको एक सुसंगत स्नैपशॉट देगा।