2010-11-18 18 views
8

मुझे अपनी स्थानीय मशीन पर गिट रिपोजिटरी के साथ बड़ी समस्याएं आ रही हैं।दूषित गिट पेड़?

मैंने एक फ़ाइल संशोधित की, git status चलाया और फ़ाइल संशोधित के रूप में दिखाई दी। मैंने git add . का उपयोग कर फ़ाइल जोड़ा और यह सामान्य रूप से काम करता था। लेकिन जब मैं के बारे में परिवर्तन हो रहा था, मैं निम्नलिखित त्रुटि मिली:

error: garbage at end of loose object 'e91ce852822d32e380ed7ddd04c93066e3c600ea' 
fatal: object e91ce852822d32e380ed7ddd04c93066e3c600ea is corrupted 

git cat-file -t e91ce852822d32e380ed7ddd04c93066e3c600ea चला कर, मैं देख सकता हूँ कि वस्तु एक पेड़ है।

मैंने भ्रष्ट ब्लॉब या प्रतिबद्धता की मरम्मत के तरीके पर कई समाधान देखे हैं, लेकिन यह एक पेड़ है, और मुझे कोई जवाब नहीं मिल रहा है कि क्या गलत हो सकता है, या इसे कैसे ठीक किया जा सकता है।

किसी भी मदद की सराहना की :)

+2

मदद कर सकता है क्या आपने 'git fsck' चलाया है? –

+0

हां, एक ही त्रुटि। हालांकि यह एक और वस्तु है, यह भी एक पेड़ है। –

+0

@ मार्ककशकॉफ: ओलोफ के समान ही त्रुटि मिली, और 'गिट एफएसके' सिर्फ एक ही त्रुटि संदेश आउटपुट करता है। –

उत्तर

2

बताने के लिए गड़बड़ हो सकती है क्या है मुश्किल है, और अपने Git संस्करण और पर्यावरण पर निर्भर करता है।
उदाहरण के लिए, पुराने दिनों में, zlib issue with git1.5.1legacyheaders = false सेटिंग्स के कारण उस तरह का संदेश ट्रिगर कर रहा था।

loose objects से एक पेड़ को बहाल करने का सवाल है, यह तो जवाब "How to recover Git objects damaged by hard disk failure?" यह करने के लिए एक तरह से दिखाता है, उसके बाद एक git fsck --full (के रूप में Mark Rushakoff टिप्पणी में उल्लेख है) का प्रदर्शन किया गया है।

git cat-file -t 6c8cae4994b5ec7891ccb1527d30634997a978ee 

and check the type of the object.

If the type is tree: you could use 'git ls-tree' to recover the tree from previous backups; then ' git mktree ' to write it again in your current repository.

लेकिन है कि या तो बड़े पैक में या भंडार बैकअप में उन वस्तुओं को खोजने लगता है।

+0

उस प्रश्न पर भी ठोकर खाई, लेकिन .git/ऑब्जेक्ट/पैक/खाली है। मैं पुराने पैक के माध्यम से खोज कैसे करूं? –

+0

@ ओलोफ: पुराने पैक? मेरा मानना ​​है कि यह आखिरी वाक्य है "लेकिन ऐसा लगता है कि उन वस्तुओं को पुराने पैक में या रिपोजिटरी बैकअप में ढूंढना" आता है। क्या आपके पास कोई बैकअप है? – VonC

+0

मेरे पास बैकअप है, लेकिन दुर्भाग्यवश यह लगभग एक महीने पुराना है। मैं उन्हें पुराने पैक में कैसे ढूंढूं? मैं या तो पुरानी प्रतिबद्धता की जांच नहीं कर सकता, काम करने के लिए एकमात्र चीज गिट लॉग है। –

-2

सुप्रभात, मेरे हिस्से के लिए, मैंने बस गिट निर्देशिका हटा दी, और फिर से गिट को हटा दिया।

+0

क्या आपका मतलब है '.git' निर्देशिका को हटा दें? तो ... मुझे लगता है कि 'गिट इनिट' नहीं है? –

3

अपना Git रेपो एक बाहरी ressource (Github) और के साथ सिंक्रनाइज़ है, तो यदि कोई समाधान काम नहीं किया है, तो आप फिर से init कर सकते हैं अपने रेपो

मैं क्या किया है:

# copy the corrupted .git dir 
mv -f .git .gitback 
git init 
# keep your config file 
cp .gitback/config .git/config 
# load objects 
git pull 

यह काम किया। जाहिर है, यह एक अच्छा समाधान नहीं है, लेकिन यह

+0

कभी-कभी, यह सब कुछ आप कर सकते हैं। हालांकि एक महान समाधान नहीं है, और वास्तव में केवल एकल परियोजनाओं पर स्वीकार्य है :) –

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