2011-09-08 10 views
11

मैं गिट 1.6.4.2 चला रहा हूं। कचरा संग्रह कहने में असफल रहा है "त्रुटि: <SHA1> खोजने में असमर्थ"।गिट - एक लापता ब्लॉब से पुनर्प्राप्त कैसे करें

मैं निर्धारित करने के लिए कि लापता वस्तु एक ब्लॉब है प्रबंधित किया है, और वहाँ कोई रास्ता नहीं है कि मैं ब्लॉब फ़ाइल वापस प्राप्त कर सकते है। ऐसा लगता है कि "गिट एड" और "गिट प्रतिबद्ध" चलाने वाली 2 स्क्रिप्ट एक ही समय में चल रही थीं और एक दूसरे के साथ हस्तक्षेप करने में कामयाब रहे ताकि किसी ने फ़ाइल की एक नई संस्करण दूसरे की तुलना में किया हो, और पुराने संस्करण का ब्लॉब गायब हो गया।

तो क्या अब मैं क्या कोशिश कर रहा हूँ रोल वापस बाहर ले करने के लिए प्रतिबद्ध है कि पेड़ कि लापता ब्लॉब को संदर्भित करता है को संदर्भित करता है मेरी भंडार है।

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

तो मेरे सवाल यह है: कैसे मैं हर पेड़ उद्देश्य यह है कि डफ ब्लॉब आईडी में शामिल है खोजने के लिए Git डेटाबेस क्वेरी कर सकते हैं? और फिर मैं यह कैसे पता लगा सकता हूं कि इसे बनाए रखने के लिए गिट प्रुन का कारण क्या है?

ट्रिकी !!

धन्यवाद केविन

+0

'git fsck' का प्रयास किया? http://book.git-scm.com/4_maintaining_git.html –

+0

मुझे यकीन नहीं है कि मैं समझता हूं कि क्या हुआ है। क्या आप रिपोर्ट कर सकते हैं कि 'git fsck' क्या कहता है? –

+1

में थोड़ा और अधिक खुदाई यह पता चला है कि मेरे सवाल का जवाब यहां हो जाने के बाद: http://stackoverflow.com/questions/7201720/how-to-delete-a-blob-from-git-repo Git छँटाई नहीं था उन चीज़ों को छीनना जिन्हें मैं वापस घायल कर दूंगा क्योंकि रीफ्लॉग अभी भी इसका जिक्र कर रहा था - गिट रीफ्लॉग की अवधि समाप्त हो गई - एक्सायर्स = अब - यह तय किया गया है कि और संदर्भित पोस्ट संदर्भित करने के लिए प्रत्येक प्रतिबद्धता पर गिट लिस्ट्री चलाने के लिए एक तंत्र प्रदान करता है ब्लॉब – kbro

उत्तर

11

में थोड़ा और अधिक खुदाई यह पता चला है कि मेरे सवाल का जवाब यहां हो जाने के बाद: How to delete a blob from git repo - git prune सामान मैं वापस घाव था क्योंकि reflog अभी भी यह करने के लिए बात कर रहे थे प्रूनिंग नहीं किया गया। चल रहा है

git reflog expire --expire=now --all 

तय किया गया। साथ ही, संदर्भित पोस्ट संदर्भित ब्लॉब को खोजने के लिए प्रत्येक प्रतिबद्धता पर git lstree चलाने के लिए एक तंत्र प्रदान करता है।

+5

हो सकता है कि 'गिट रीफ्लॉग समाप्त हो जाए - एक्सपीयर = अब - सभी', '--exires = now' नहीं? –

1

मैं एक ही समस्या (लापता ब्लॉब) और

git reflog expire --expire=now --all 

साथ समाधान चाल नहीं किया था। मैं अपने यहाँ समाधान नहीं मिला: https://git.wiki.kernel.org/index.php/GitFaq#How_to_fix_a_broken_repository.3F

यह सरल रेखा

git hash-object -w <file> 

फिक्स्ड लापता ब्लॉब।

उम्मीद है कि इससे मदद मिलती है।

+0

'Git हैश-वस्तु डब्ल्यू ' आप रेपो में एक लापता फ़ाइल पुन: लगाएं करने के लिए अनुमति देता है। यह मेरी समस्या का व्याप्त रूप से विरोध है। मैं रेपो से एक यह है कि डफ फ़ाइल को हटाने के लिए चाहते थे, और 'Git prune' यह क्योंकि reflog अभी भी यह की ओर इशारा करते था नहीं कर रहा था। – kbro

संबंधित मुद्दे