2009-10-02 23 views
37

मैं अपने Git भंडार में इस त्रुटि हो रही है से निपटने के लिए:यह कैसे Git त्रुटि

22:09:15 $ git status 
# On branch master 
error: Could not read 8124cc15c63be92d534e4cdfa33c38d54deee122 
error: unable to read tree object HEAD 
nothing to commit (working directory clean) 

error: unable to read tree object HEAD के लिए Google खोज ज्यादा मदद भी नहीं होती, यह त्रुटि बहुत ही दुर्लभ हो रहा है। मुझे यकीन नहीं है कि इससे कैसे निपटें। क्या यह एक हार्ड ड्राइव विफलता हो सकता है?

संपादित: git fsck के उत्पादन में निम्नलिखित है:

broken link from commit 607328dc80e4901a55b95c683d4fbf43e6df28bf 
       to tree 8124cc15c63be92d534e4cdfa33c38d54deee122 
missing tree 8124cc15c63be92d534e4cdfa33c38d54deee122 
dangling tree 56b5d4a5e429d251582ec927bca7ef1225510c41 
dangling tree 0259d2d38b18b6136bb6070fb41faf3624453cc6 
+0

यह किसी तरह के भ्रष्टाचार की तरह लगता है। क्या आपने 'git fsck' कोशिश की? –

उत्तर

20

एक "टूटा हुआ लिंक" संदेश पर, आप GitFaq recommendations का पालन कर सकते हैं:

  • वापस ऊपर अपने सभी राज्य ताकि आप जो कुछ भी कर रहे हैं वह फिर से करने योग्य है यदि आप चीजों को और अधिक भ्रष्ट करते हैं!
  • किसी भी भ्रष्ट पैक फ़ाइलों
    • देखें "man git-unpack-objects", और विशेष रूप से "-r" झंडा विस्फोट।
      इसके अलावा, कृपया यह समझें कि यह केवल उन वस्तुओं को अनपैक करता है जो पहले से उपलब्ध नहीं हैं, इसलिए आपको पैक-फ़ाइल को अपने सामान्य स्थान से पहले स्थानांतरित करने की आवश्यकता है (अन्यथा git-unpack-objects पैक में पैक-फ़ाइल में मौजूद सभी ऑब्जेक्ट्स पाएंगे खुद -file, और कुछ भी खोल नहीं)
  • किसी भी टूटी हुई है और/या लापता वस्तुओं
    • इस चुनौतीपूर्ण हिस्सा है बदलें।
      कभी-कभी (उम्मीद है कि अक्सर!) आप लापता वस्तुओं को भंडारों की अन्य प्रतियों में पा सकते हैं।
      दूसरी बार, आपको डेटा को किसी अन्य तरीके से खोजने का प्रयास करने की आवश्यकता हो सकती है (उदाहरण के लिए, हो सकता है कि आपकी चेक-आउट प्रति में फ़ाइल सामग्री हो, जो गायब ऑब्जेक्ट होगा?)।

      • लापता वस्तुओं कर सकते हैं:
    • यकीन है कि सब कुछ "git fsck --full"
    • सब कुछ repack वापस एक कुशल राज्य के लिए फिर से पाने के लिए

नोट्स के साथ खुश है related to alternate भी हो (जब आप share objects between repositories) वाई वें git alternates (भले ही can be risky)।

  • जेजीआईटी/एजीट ग्रहण प्लगइन have a few issues पर भी जाना जाता है।
    : Git 2 के साथ (अपडेट फरवरी 2012 those plugins एक लंबा सफर तय किया है और अब काफी स्थिर कर रहे हैं)
  • अद्यतन जुलाई 2016 (7 साल laters),।10 जल्द ही जारी किया गया हो, आप अभी उपयोग कर:

    git fsck --name-objects 
    

    यह नामकरण उन टूटी कड़ियाँ

    अधिक के लिए देखें "How to fix git error broken link from tree to tree?" के मूल में मदद करता है।

    +0

    बस एक सिर ऊपर है कि आप जिस गिटफैक से लिंक कर रहे हैं वह टूटा हुआ है। –

    +0

    @ क्रिस विल्सन: धन्यवाद। लिंक बहाल – VonC

    +0

    @VonC यह फिर से टूटा हुआ है। यहां सही लिंक https://git.wiki.kernel.org/index.php/GitFaq – MikeKusold

    4

    मुझे एक ही समस्या थी। बहुत सारे बालों को खींचने के बाद, मैंने पाया कि यह भंडार की गिट फाइलों में बदली गई अनुमति के कारण था। मैंने इसे निम्नानुसार हल किया है:

    $ cd .git 
    $ chmod 755 * 
    

    हो गया!

    +0

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

    +3

    मेरे लिए काम नहीं किया – jacob

    +0

    भगवान आपको आशीर्वाद देते हैं :-) –

    11

    मुझे अभी भी एक ही समस्या थी। भ्रष्टाचार तब हुआ जब मेरे लैपटॉप ने git pull के दौरान हार्ड पावर ऑफ किया। मेरे पास रिमोट बैकअप रिपोजिटरी है। सबसे पहले मेरे पास कई ऑब्जेक्ट फ़ाइलें थीं। Git/items/??/* जो शून्य आकार थे।

    • को दूर शून्य लम्बाई एक ../fresh/ भंडार
    • टूटा भंडार में

      में वस्तुओं

    • क्लोन दूरस्थ भंडार, मैं

      cat ../fresh/.git/objects/pack/pack-*.pack | git unpack-objects किया: भंडार की एक cp -a बैकअप के बाद, मैं ऐसा किया

    इससे गायब वस्तुओं को भर दिया गया ऑब्जेक्ट डेटाबेस। लगता है कि भंडार अब वापस आ गया है। Git शाखा डी [शाखा का नाम]

    और उसके बाद चेकआउट फिर दूरदराज के शाखा: Git चेकआउट बी [शाखा

    +0

    +1 यह मेरी स्थिति में बहुत अच्छी तरह से काम करता प्रतीत होता है - पोस्टिंग के लिए धन्यवाद :) – cmhughes

    +0

    अजीब, गिट ने शिकायत की कि मेरे पैक में से एक भ्रष्ट था। मैंने इस आदेश का उपयोग करके भ्रष्ट पैक फ़ाइल को अनपॅक किया है, यह किसी भी भ्रष्टाचार के बारे में अनपॅक करने के दौरान शिकायत नहीं करता है, और अब गिट एफएसके फिर से खुश है! – thenickdude

    +0

    धन्यवाद! यह मेरे लिए काम किया। – galactica

    1

    आप uncommited परिवर्तन नहीं है, तो सबसे आसान समाधान स्थानीय शाखा को हटाने के लिए है नाम] मूल/[शाखा का नाम]

    2

    मुझे अपने Homebrew इंस्टॉल की गिट भंडार में एक समान त्रुटि मिली। सभी लापता वस्तुओं को एक-एक करके बहाल करने के बजाय, मुझे .git निर्देशिका को आसानी से हटाने और Homebrew’s public repository से पुनः क्लोनिंग करके इसे फिर से बनाना आसान लगता है। ये मेरे कदम थे:

    • जांचें कि आपके गिट भंडार में आपके पास कौन सी जानकारी है जो आपको पुनः क्लोनिंग से प्राप्त नहीं होगी। मेरे लिए, यह निजी शाखाएं, छिद्र, और रिमोट था।
      • एक नई शाखा बनाकर, छेड़छाड़ करने और नाम में "[डब्ल्यूआईपी]" जैसी कुछ चीज़ों के साथ काम करने के लिए असली प्रतिबद्धताओं में स्टैश को परिवर्तित करें ताकि यह दिखाया जा सके कि यह एक छिद्र है।
      • उन शाखाओं को सहेजें जो सार्वजनिक रिमोट पर नहीं हैं, उन्हें स्वयं के रिमोट पर दबाकर। यह गिटहब पर भंडार का कांटा हो सकता है, या आपकी मशीन पर एक अलग स्थान पर बस एक नया गिट भंडार हो सकता है।
      • यदि आपके पास एक से अधिक रिमोट हैं, तो git remote -v के आउटपुट को सहेजें, जिसमें आपके रिमोट के नाम और यूआरएल हैं, ताकि आप उन्हें मैन्युअल रूप से बाद में जोड़ सकें।
    • अपनी repoistory की .git निर्देशिका हटाएं (या इसे .git-broken पर पुनर्नामित करें और इसे बाद में हटाएं)। कमांड लाइन पर, यह rm -rf .git है।
    • git clone https://github.com/Homebrew/homebrew.git या जो भी यूआरआई के साथ दूरस्थ निर्देशिका को फिर से क्लोन करें।
    • इसने भंडार के बाद नामित एक नया उप-फ़ोल्डर homebrew बनाया होगा। आप उस से .git निर्देशिका चाहते हैं; आपकी स्थानीय फाइलें पहले से ही ठीक हैं। तो mv homebrew/.git .git, और उसके बाद homebrew फ़ोल्डर हटाएं।
    • आपके गिट भंडार में कोई त्रुटि नहीं होनी चाहिए, क्योंकि आपने इसे स्क्रैच से पुनर्निर्मित किया है। अब पहले चरण में सहेजी गई किसी भी जानकारी को पुनर्स्थापित करें।
      • यदि आपके पास अतिरिक्त रिमोट थे, तो उन्हें git remote add <name> <url> के साथ फिर से जोड़ें।
      • यदि आप रिमोट रिपोजिटरी में किसी भी शाखा (या शाखाओं में परिवर्तित स्टैश) का बैक अप लेते हैं, तो उन्हें उस रिपॉजिटरी से अपने स्थानीय भंडार में खींचें।
      • यदि आप चाहते हैं, तो आप git reset HEAD^ के साथ "[डब्ल्यूआईपी]" प्रतिबद्धता को रोल करके स्टैश-शाखाओं को वापस स्टैश में परिवर्तित कर सकते हैं और git stash save <custom-message> के साथ कार्यशील निर्देशिका को फिर से स्टैश में सहेज सकते हैं।

    आप git fsck चलाते हैं, तो कोई त्रुटि देखना चाहिए:

    $ git fsck 
    Checking object directories: 100% (256/256), done. 
    Checking objects: 100% (197135/197135), done. 
    Checking connectivity: 197162, done. 
    $ 
    

    और git stash list, git branch, और git remote -v पहले की तरह ही उत्पादन को दिखाना चाहिए।

    0

    मैं एक ही निर्देशिका/परियोजना फ़ोल्डर में परिवर्तन करके त्रुटि ठीक कर दी और फिर नए परिवर्तन के लिए प्रतिबद्ध करने की कोशिश की, क्या हुआ मैं 'के लिए अमान्य ऑब्जेक्ट 100,644 e38e910ceb18b09f436f353c3a131bfe2caba130' पुस्तक एक त्रुटि संदेश मिल गया है/alise_mathe/ऐप्स/src/मुख्य/res/menu/drawermenu.xml ' इस संदेश ने समस्या हल की, मैंने फ़ाइल नाम को' drawer_menu.xml 'में बदलकर drawermenu.xml को दोबारा प्रतिक्रिया दी। परिवर्तन किए गए परिवर्तनों को जोड़ा और यह सब कुछ है। (एंड्रॉयड स्टूडियो)

    मुझे आशा है कि इस मदद करता है कुछ कैसे

    0

    मैं अपने दूरस्थ सर्वर निर्देशिका से Capistrano 'रेपो' फ़ोल्डर को हटाने से यह त्रुटि ठीक। मैं कई अन्य सुझाई गई समस्याओं से गुजर गया और हल किया कि समस्या मेरी स्थानीय परियोजना के साथ नहीं है। समस्या तब प्रकट हुई जब कैपिस्ट्रानो रेपो से रिमोट तक खींच रहा था। मेरे लिए, शायद यह एक रोकथाम परिनियोजन के कारण था जो भ्रष्ट वस्तुओं/ऑब्जेक्ट संदर्भों को छोड़ देता था। मेरे मेजबान ने अभी भी एक सर्वर माइग्रेशन किया था, शायद इस प्रक्रिया के दौरान कुछ भ्रष्ट हो गया।

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