2011-08-29 19 views
23

हम अपने गिट भंडार के लिए गेरिट का उपयोग कर रहे हैं। एक परियोजना पर जो कई महीनों से सक्रिय है, हम अचानक किसी भी बदलाव को धक्का देने में असमर्थ हैं।"ग़लत पेड़" त्रुटि के लिए मैं अपने गिट भंडार को कैसे पुनर्प्राप्त कर सकता हूं?

error: unpack failed: error Missing tree 14d62f0ed4385e3f68f226ac133fa9932a9c65c9

git fsck --full पैदावार निष्पादित:: जब हम git push निष्पादित हम निम्न त्रुटि देख

dangling tree 2701c92fb6eab1826482f6bcc9598413e651a92a 
dangling blob c505b3b12cfacd1e26dec8dc559820a30fc20c27 
dangling blob 8907f94b5b4ec881e1b86d50681795e368c167ff 
dangling blob 4938d9fc34c6e2f92c68872bfec6e070b2b3a9c2 
dangling blob 8a5c8b8d35484ea1470e2d8e6c482fcb97b23d0f 
dangling commit 3072d3314e20bf6c6998e1c02986d83019d3e1df 
dangling tree 5377d7f7111d340854c3ee0946667c202227e603 
dangling tree c3783e9ab540457924ceb9f9fb5ea1c2b97472b1 
dangling blob 8b92d1765038e4ec5e721f98a2aabb305a7f9819 
dangling tree 38a03153f0f18ca15846e9bd4983a86800a43a94 
dangling commit 8db2d6ae5364174bebe13720a359ddb2e62d4c9d 

हमारे डेवलपर्स के सभी एक ही त्रुटि का सामना कर रहे हैं जब वे पुश करने के लिए प्रयास करें। अब तक, हमने gerrit repo (git init --bare ...) को फिर से शुरू करने का प्रयास किया है और इसे दबाया है। हमने एक अलग रेपो के साथ एक नई गेरिट परियोजना बनाने की भी कोशिश की है। अंत में, हम एक ही त्रुटि प्राप्त करते रहते हैं।

क्या किसी के पास कोई कारण नहीं है कि कारण क्या होगा, या कैसे ठीक किया जाए?

उत्तर

7

इसे वापस चलाएं ... कुछ भी करने से पहले इसे इस सेकेंड में वापस लें।

अब, यह दुर्भाग्यपूर्ण लगता है। यह भी शर्म की बात है कि ऐसा लगता है कि आपके पास नियमित बैकअप नहीं है। हालांकि, अच्छी खबर है, हालांकि: मैं शर्त लगाता हूं कि आपके डेवलपर्स के पास यह फ़ाइल है, हालांकि यह एक पैक फ़ाइल में हो सकती है। किसी और की .git निर्देशिका में निम्न का प्रयास करें। ध्यान दें कि गिट निर्देशिका नाम के लिए हैश के पहले दो वर्णों का उपयोग करता है।

find . -name d62f0ed4385e3f68f226ac133fa9932a9c65c9 

कि दिखाई देती है, अपने सर्वर पर एक ही रिश्तेदार पथ के लिए कि फ़ाइल की प्रतिलिपि है, और जीवन अच्छी तरह से आगे बढ़ने चाहिए। (कर सकते हैं जल्दी से इस स्क्रिप्ट आप या मैन्युअल रूप से ऐसा)

find . -name \*.idx -exec cat {} \; | git show-index | grep 14d62f0ed4385e3f68f226ac133fa9932a9c65c9 

है कि आप जो फ़ाइल यह है पैक नहीं दिखाया जाएगा, लेकिन यह आप अपने वहाँ बता देंगे: यदि नहीं, तो इस प्रयास करें। सही पैक फ़ाइल ढूंढें और इसे विस्तृत करें ...

git unpack-objects $FILE 

वहां से, फ़ाइल को अपने सर्वर पर एक ही सापेक्ष पथ पर कॉपी करें। यदि यह हल नहीं करता है, तो आगे की काम की आवश्यकता है। एक डेवलपर के अद्यतित-पर्याप्त भंडार को स्वैप करना चीजों को ठीक कर सकता है। आप https://git.wiki.kernel.org/index.php/GitFaq#How_to_fix_a_broken_repository.3F का भी पता लगाना चाहते हैं, या अपडेट अपडेट पोस्ट कर सकते हैं और मेरे पास वापस आने के लिए प्रतीक्षा कर सकते हैं।

+0

जानकारी के लिए धन्यवाद, यह मुझे थोड़ा सा मदद की। मैं सही आईडीएक्स फ़ाइल ढूंढने में सक्षम था, लेकिन पैक फ़ाइल को अनपॅक करने से कुछ भी ठीक नहीं हुआ। यह हमारे कुछ अन्य देवताओं के लिए भी वही कहानी थी। अंत में, मैं समय से बाहर भाग गया, इसलिए हमने एक नया रेपो शुरू करके और पुराने इतिहास को इतिहास के लिए रखते हुए समस्या का सामना किया है। –

+0

हमें एक समान समस्या है जहां हम लापता वृक्ष त्रुटि के कारण कुछ शाखाओं को धक्का देने में असमर्थ हैं। हमने लापता ऑब्जेक्ट को पाया है और इसे रिमोट रिपोजिटरी में कॉपी किया है लेकिन समस्या बनी हुई है। कोई सुराग? –

3

git pull --rebase आज़माएं।

मैंने diff को बचाया (git show > ~/mychanges.txt, फ़ाइल के शीर्ष पर प्रतिबद्ध संदेश ले लिया)। चेक की गई एक नई शाखा (git checkout -b newbranch) ने परिवर्तनों को लागू किया (git apply ~/mychanges.txt), और फिर git pull --rebase किया। फिर सब कुछ काम किया।

+1

मेरा दिन बचाने के लिए धन्यवाद! – simonso

0

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

0

त्वरित समाधान प्राप्त करें -> रीबेस-> प्रतिबद्धता और फिर पुश करें।

3

नहीं मास्टर शाखा पर, तो आप बस दूरदराज के शाखा द्वारा हटा सकते हैं:

git push --delete origin <branch_name> 

और फिर अपने शाखा दूरस्थ करने के लिए वापस धक्का:

git push -u origin <branch_name> 
11

मैं पर यह एक ही त्रुटि हो रही है मेरा कछुआ गिट। मुझे अंततः इस त्रुटि का मूल कारण मिलता है।

चरण जो इस त्रुटि का कारण बनता है;

  • सिर पर एक नई शाखा बनाएं।
  • नई branchs पर कुछ संशोधनों करते
  • किसी ने भी सिर शाखा पर संशोधन करने के
  • कोशिश अपनी शाखा पुश करने के लिए

एक स्थानीय शाखा बनाई गई है और कुछ संशोधनों के आरा तक धकेल दिया नहीं करता है, तो यह त्रुटि तब आ जाएगा मुख्य शाखा में बनाया गया। यह एक सामान्य बात है, क्योंकि रिमोट हेड शाखा को आपकी स्थानीय शाखा के बारे में कोई भी पुश एक्शन तक नहीं पता है।

इस त्रुटि को हल करने के लिए, हेड शाखा को पूर्ण खींच कार्रवाई करें। फिर अपनी शाखा स्विच करें और धक्का आज़माएं।

+0

वाह यह एक पूरी तरह से गैर स्पष्ट कारण है। यह समाधान मेरे लिए काम किया! –

29

git push के बजाय git push --no-thin का उपयोग करें।

Git डॉक्स से:

A thin transfer significantly reduces the amount of sent data when the sender and receiver share many of the same objects in common. The default is --thin.

+3

यदि आपकी शाखा कई प्रतिबद्धताओं से आगे है, तो आप इस विकल्प का उपयोग करना चाह सकते हैं। यह बढ़िया काम करता है! – Riverside

1

Git के अपने संस्करण अपग्रेड करने का प्रयास है, हम 1.9.0

3

के साथ मुद्दों को देखा जब हम इस मिलता है, मैं लगभग हमेशा एक Git जीसी के साथ इसे ठीक कर सकते हैं:

git gc --aggressive --prune=now 

पहले अपने गिट रेपो का बैक अप लें!

1

यह आमतौर पर तब होता है जब प्रतिबद्धता और धक्का का समय अलग होता है और अंत में दोनों पेड़ों के बीच एक मेल नहीं खाता है। एक दूरस्थ शाखा नदी के ऊपर और स्थानीय शाखा foo

सबसे पहले फेंक सब अप्रतिबद्ध परिवर्तन

git reset --hard foo 

का उपयोग कर फिर का उपयोग कर दूरस्थ शाखा ट्रैक को देखते हुए

git branch --set-upstream-to=upstream/foo 

और अंत में

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

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