जब बिजली चली जाती है तो गिट कितना मजबूत होता है?


24

एक दिन मैं Git का उपयोग कर रहा था (मैं अभी भी इसका उपयोग कर रहा हूं) और जब मैं कमिट कर रहा था तब बिजली चली गई।

जब मैं (वास्तव में, बिजली) वापस आया, तो गिट रेपो भ्रष्ट था। मुझे सटीक नाम याद नहीं है, लेकिन यह "अमान्य रीफ़्स" या ऐसा कुछ था।

यह अनुमान लगाना आसान है कि ऑपरेशन के बीच में कमिट टूट गया था (मैं IntelliJ के माध्यम से कमिट कर रहा था, जो इंडेक्स को स्वचालित रूप से जोड़ता है)। यह अनुमान लगाना भी आसान था कि, वास्तव में 'कमिट' एसीआईडी ​​के रूप में नहीं है क्योंकि डीबीएमएस ऑपरेशन एक ही नाम के साथ है।

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


10
एक यूपीएस खरीदें? .....
राबर्ट हार्वे

एक दैनिक बैकअप करें?
शाफ़्ट फ्रिक

यह समस्या को हल नहीं करता है - कल्पना करें कि git repo एक सर्वर पर है और I PUSH एक स्थानीय रेपो से, और सर्वर में कमिट को आत्मसात करते हुए, ऊर्जा फिर से नीचे जाती है। वही समस्या लेकिन इस बार बिना मानवीय उपस्थिति के।
लुइस मूसली

जवाबों:


10

मुझे नहीं पता कि क्या कोई तरीका है कि Git कमिट्स पूरी तरह से समय पर बिजली विफलताओं से बचे, लेकिन आप अपने रिपॉजिटरी को ठीक करने में सक्षम हो सकते हैं।

गिट वस्तुओं को अपरिवर्तनीय माना जाता है, इसलिए आपके सभी पुराने कमिट अभी भी मान्य होने चाहिए। इस उत्तर के अनुसार , आप .git/refs/heads/<branch-name>उस शाखा के प्रमुख को बदलने के लिए हैश को बदल सकते हैं जिस पर आप पिछली प्रतिबद्धताओं पर काम कर रहे थे (आप उन्हें देख सकते हैं .git/logs/HEAD)।

उस उत्तर के लिए टिप्पणी कहती है कि यह विधि "अभी भी टूटी हुई स्थिति में भंडार छोड़ती है, लेकिन यह इसे पुनर्प्राप्त करने की अनुमति देता है"। मैंने यह परीक्षण नहीं किया है (कोई विचार नहीं है कि आपकी स्थिति को कैसे दोहराया जाए), लेकिन मुझे लगता है कि वसूली के माध्यम से किया जाता हैgit gc , जो भ्रष्ट कमिट को हटा देगा।


6
"आपकी स्थिति को दोहराने का कोई विचार नहीं है" प्लग खींचो? ;)
यानिस

3
@YannisRizos शायद अगर यह SVN था, लेकिन Git कमिट मानव क्षमताओं के लिए बहुत तेज़ है ...
इदं आर्य

5
गिट खुला स्रोत है, है ना? इसलिए समस्या को पुन: उत्पन्न करने के लिए, कोड का निर्माण करें, डिस्क से डेटा सहेजे जाने से पहले एक ब्रेकपॉइंट सेट करें - और फिर प्लग को खींचें।
जॉन सॉन्डर्स

10

Git का स्टोरेज सिस्टम ट्रांसेक्शनल नहीं है, इसलिए निश्चित रूप से एक मौका है कि एक हार्डवेयर समस्या असंगत स्थिति में चीजों को छोड़ सकती है। दूसरी ओर, Git भी वास्तव में तेज़ है, इसलिए आपको "बिजली की विफलता" प्रकार की समस्याओं से प्रभावित होने के लिए वास्तव में अशुभ होना होगा (डिस्क के साथ व्यवस्थित समस्याएं कुछ और हैं)। गति वास्तव में इस तथ्य से भाग में आती है कि यह लेन-देन नहीं है; लेन-देन वास्तव में काफी महंगे हैं क्योंकि उन्हें डिस्क से वापस पुष्टि के लिए इंतजार करना पड़ता है कि उसने डेटा लिखा है। (डेटाबेस इस लागत को छिपाने की कोशिश करने के लिए सभी प्रकार की चीजें करते हैं, लेकिन अंततः वे अभी भी कीमत का भुगतान करते हैं। कुछ प्रतियोगी डीवीसीएस लेन-देन कर रहे हैं, और हाँ, वे गिट के रूप में एक ही हार्डवेयर पर थोड़ा धीमा हैं।)

सबसे खराब स्थिति में - कुल विनाशकारी डिस्क विफलता (जो मैंने देखा है) - किसी भी डीवीसीएस को पुनर्प्राप्त करने का एकमात्र तरीका इस तथ्य का उपयोग करना है कि यह वितरित है। यदि आपने अपने परिवर्तनों को किसी अन्य सिस्टम में बहुत पहले तक पुश किया है और उन्होंने उन्हें कई अलग-अलग होस्टों को साझा किया है, तो रिकवरी केवल इन अन्य स्थानों में से एक का उपयोग करने का एक मामला है, जो कि एक स्रोत के रूप में, आपकी शाखाओं को खींचने के लिए एक जगह है ( भले ही अस्थायी रूप से)। जैसा कि आप दिलचस्प शाखाओं के इतिहास को वापस खींच लेंगे और आप बहुत जल्दी फिर से काम कर पाएंगे; कुछ भी जो आपके रेपो की वितरित प्रतियों को एक ही बार में मिटा देता है, या तो उस तरह की आपदा है जहां आप प्रोग्रामिंग के बारे में चिंता नहीं करते हैं (प्रमुख उल्का प्रभाव पर विचार करें) या एकमुश्त दुश्मन कार्रवाई है। (ऐसे दुश्मन न बनाने की कोशिश करें ...) यह गैर-वितरित प्रणालियों के विपरीत है, जहां केंद्रीय सर्वर को खोना जो सब कुछ होस्ट करता है वह एक घातक झटका है।


5
यदि आप अपनी शाखाओं को आगे नहीं बढ़ाते हैं, तो बैकअप न रखें और यूपीएस न करें, यदि आप हार्डवेयर समस्याओं को मिटा देते हैं, तो आपको खुद को दोष देना होगा। आपको उपकरण मिल गए हैं ...
डोनल फेलो

1
यह सुनिश्चित करने के लिए कोई तरीका या प्लगइन नहीं है कि क्या git ऑपरेशंस transactional हैं? अगर इस तरह के विकल्प के लिए प्लग-इन मौजूद है, तो मुझे उनके (यानी संचालन) धीमे होने की परवाह नहीं होगी। सौभाग्य से मुझे कोई हार्डवेयर समस्या नहीं है। दुर्भाग्य से इस इमारत में ऊर्जा अक्सर बंद हो जाती है (यह कहते हुए कि दो सप्ताह में एक बार इसकी उपस्थिति होती है), और मैं पूरे समय कोडिंग कर रहा हूं और यूपीएस नहीं। सौभाग्य से मैंने इसे गिथब के रूप में (क्लोन / पुश किया) किया। दुर्भाग्य से मैं कुछ समय गंवाता हूं जब सब कुछ वापस करने और परियोजना को फिर से दोहराने के लिए।
लुइस मूसली

2
काम करते समय बार-बार बिजली की निकासी का मतलब है कि यदि आप हार्डवेयर को नुकसान नहीं पहुंचा रहे हैं, तो आप वास्तव में फाइलसिस्टम भ्रष्टाचार का खतरा बढ़ा रहे हैं। मुझे आश्चर्य होगा कि आप यूपीएस प्राप्त करने के विचार को मनोरंजक क्यों नहीं बना रहे हैं, जो आपके द्वारा बताए गए अधिकांश वर्णित मुद्दों को हल करेगा और शायद सबसे अच्छा उत्तर होगा।
बार्ट सिल्वरस्ट्रिम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.