Git: एक झूलते हुए कमिट / ब्लॉब क्या हैं और वे कहाँ से आते हैं?


149

मैं झूलने और खिलने पर बुनियादी जानकारी के लिए देख रहा हूँ।

मेरा रेपो ठीक लगता है। लेकिन मैंने git fsckपहली बार यह देखने के लिए दौड़ लगाई कि यह क्या है और मेरे पास 'लटकती हुई बूँदें' और 'एकल झूलने' की एक लंबी सूची है।

ये चीजें क्या हैं? वे कहां से आए हैं? क्या वे मेरे रेपो की स्थिति के बारे में कुछ भी असामान्य (अच्छा या बुरा) इंगित करते हैं?

जवाबों:


96

अपने गिट रिपॉजिटरी के साथ काम करने के दौरान, आप ऑपरेशन से बाहर निकलने का समय समाप्त कर सकते हैं, और अन्य चालें बना सकते हैं जो मध्यस्थ सूजन का कारण बनती हैं, और यहां तक ​​कि कुछ चीजें जो आपके लिए git करता है, जानकारी के नुकसान से बचने में मदद करता है।

आखिरकार (सशर्त, git gc man पेज के अनुसार ) यह कचरा संग्रहण करेगा और इन चीजों को साफ करेगा। तुम भी, लागू कचरा संग्रहण प्रक्रिया द्वारा यह मजबूर कर सकते हैं git gc

इसके बारे में अधिक जानकारी के लिए, git-scm साइट पर रखरखाव और डेटा पुनर्प्राप्ति देखें ।

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


10
इसलिए यह कहना उचित है कि 1) जब तक मुझे नहीं लगता कि मेरे रेपो के साथ कुछ गलत है git gc, इनको दूर करना सुरक्षित है , और 2) मुझे इस बारे में बिल्कुल भी चिंता करने की आवश्यकता नहीं है क्योंकि ये लटकते बिट सामान्य हैं और पहले से ही समझे हुए हैं। उन्हें संभालो?
डबलएजैक

7
यह एक उचित मूल्यांकन होगा।
vgoff

9
इसके अलावा, किसी भी समय आप किसी फ़ाइल को 'जोड़' सकते हैं, लेकिन फ़ाइल के उस सटीक संस्करण के लिए प्रतिबद्ध नहीं हैं, आप एक झूलने वाली बूँद के साथ समाप्त होते हैं। चिंतित होने की कोई बात नहीं।
छावनी 7

7
double1ejack - सामान्यतया आपको कचरा संग्रह मैन्युअल रूप से नहीं चलाना चाहिए। किसी भी तरह की जरूरत होने पर कचरा इकट्ठा करना और कचरा एकत्र करना एक बुरी आदत है। इसे मैन्युअल रूप से चलाने का नुकसान यह है कि आप झूलने वाले ब्लब्स को पुनर्प्राप्त करने की क्षमता खो देते हैं और मानते हैं कि आप अभी नहीं चाहते हैं, लेकिन भविष्य में आप ऐसा कर सकते हैं। एक बार जब आप कचरा संग्रह चलाते हैं तो आप गिट से कुछ बहुत शक्तिशाली पुन: कार्यशीलता को हटा देते हैं। सावधानी के साथ उपयोग करें और अपवाद के रूप में, नियम नहीं। --- बस अपने काम करने दो।
एलिजा लिन

96

डेंग्लिंग ब्लॉब = एक परिवर्तन जिसने इसे स्टेजिंग क्षेत्र / सूचकांक में बनाया, लेकिन कभी प्रतिबद्ध नहीं हुआ। एक चीज जो आश्चर्यजनक है, वह यह है कि एक बार जब यह मंचन क्षेत्र में जुड़ जाता है, तो आप इसे हमेशा वापस पा सकते हैं क्योंकि ये बूँदें ऐसे व्यवहार करती हैं जैसे कि इनमें एक हैश भी हो !!

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


5
क्या Should पूर्वजों ’को ants वंशज’ पढ़ना चाहिए? सामान्य तौर पर, आप अपने पूर्वजों के माध्यम से किसी भी कमिट तक नहीं पहुँच सकते।
फिल मिलर

@ नोवेलोक्रेट मेरे पास एक ही विचार था, मैं मानता हूं कि इसे शायद वंशज पढ़ना चाहिए।
स्टेंटेंट

1
मैं अभी भी आपके उत्तर में "आरोही" पढ़ता हूं। ऐसा लगता है कि 2 जुलाई से आपके संस्करण ने टाइपो को सही नहीं किया।
13

आप एक झूलने वाली बूँद को कैसे वापस पा सकते हैं?
हैलोगूडीबाई

1
@ElijahLynn आप सही हैं। मुझे लगता है कि मैंने चर्चाओं को बहुत जल्दी पढ़ा। एक झूलने वाले वचन में कोई वंशज / बच्चा नहीं होता है और उसे किसी टैग या शाखा द्वारा संदर्भित नहीं किया जाता है।
iclman

44

HOWTO http://www.itkie.ro/news/howto-remove-all-dangling-commits-from-your-git-repository/ से आपके गिट रिपॉजिटरी के सभी झूलों को हटा दें

git reflog expire --expire=now --all
git gc --prune=now

सुनिश्चित करें कि आप वास्तव में उन्हें हटाना चाहते हैं, क्योंकि आप तय कर सकते हैं कि आपको उनकी आवश्यकता है।


5
वास्तव में, अधिकांश उपयोगकर्ताओं को कभी भी इसकी आवश्यकता नहीं होनी चाहिए और यदि वे ऐसा करते हैं तो शायद यह प्रोग्रामेटिक उपयोग के लिए है। डिस्क स्थान को बचाया या झूलते हुए कमिट को हटाकर गति बढ़ाना मेरे विचार में प्रयास के लायक नहीं है।
एलिय्याह लिन

1
यह एक अलग सवाल का जवाब देता है।
एलिजा लिन

6

एक झूलती हुई प्रतिबद्धता एक ऐसी प्रतिबद्धता है जो संदर्भ से जुड़ी नहीं है, यानी उस तक पहुंचने का कोई रास्ता नहीं है।

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

Git स्वचालित रूप से कचरा एकत्र करता है (यानी निपटता है) झूलने वाले कमिट। हम git reflogएक शाखा (झूलने वाले कमिट) को पुनर्प्राप्त करने के लिए उपयोग कर सकते हैं जो इसे विलय किए बिना हटा दिया गया था। हम हटाए गए कमिट्स को केवल तभी पुनर्प्राप्त कर सकते हैं जब वह स्थानीय ऑब्जेक्ट स्टोर में मौजूद हो। यदि यह कचरा एकत्र किया गया था, तो हम इसे पुनर्प्राप्त नहीं कर सकते हैं।

यहां छवि विवरण दर्ज करें

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

एक तरफ के रूप में, ध्यान दें कि गिट एक निर्देशित एसाइक्लिक ग्राफ के रूप में अपने प्रतिबद्ध ग्राफ / इतिहास का प्रतिनिधित्व करता है । प्रत्येक वचन में इसका संदर्भ दिया गया है। इसलिए, बच्चे से माता-पिता के लिए प्रतिबद्ध आरेख बिंदु में तीर प्रतिबद्ध है। हमें एक शाखा पर पुराने कमिट्स तक पहुंचने के लिए नवीनतम बच्चे के लिए एक संदर्भ की आवश्यकता है।

पुनश्च - उपरोक्त आरेख और समझ इस मुफ्त पाठ्यक्रम से प्राप्त की गई थी । हालांकि यह पाठ्यक्रम काफी पुराना है, फिर भी ज्ञान अभी भी प्रासंगिक है।

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