Git में दूषित फ़ाइलें


8

मैंने हाल ही में निम्नलिखित कमांड का उपयोग करके अपने git repos इतिहास से कुछ फ़ोल्डर निकाले हैं:

git filter-branch --index-filter 'git rm -r --cached var' -- --all

दुर्भाग्य से मैं इस रेपो से अब और नहीं खींच सकता, यह मुझे मिलने वाला त्रुटि सेट है:

git pull
remote: Counting objects: 3953, done.
remote: Compressing objects: 100% (2810/2810), done.
error: garbage at end of loose object '4b391c2cc93ccc8d2f7262335629a7f81d6bcbe0'
fatal: object 4b391c2cc93ccc8d2f7262335629a7f81d6bcbe0 is corrupted
fatal: index-pack failed

आपने किस लिनक्स सिस्टम पर बदलाव किए?
एंड्रेस जान टैक

मैं खिड़कियों का उपयोग कर रहा था; अब मैं लिनक्स पर हूँ और यह अच्छी तरह से काम करता है
mnml

जवाबों:


7

किसी तरह की आत्मा ने इसे स्वचालित रूप से करने के लिए एक स्क्रिप्ट लिखी (और अधिक अच्छी तरह से), लेकिन पुनर्प्राप्ति की प्रक्रिया मूल रूप से यह है:

  1. उस फ़ाइल की जाँच करें जो कचरा रिपोर्ट करती है, हेक्सडंप के साथ।

    $ hexdump .git/objects/4b391c2cc93ccc8d2f7262335629a7f81d6bcbe0
    

    आप उस फ़ाइल के एक हिस्से की तलाश कर रहे हैं जहाँ ज़ीरो का एक बड़ा समय है। यदि ऐसे कई स्पैन हैं, तो मुझे अच्छा भाग्य (N = 2) मिला है, जब वे शून्य के पहले विशाल सेट पर विचार कर रहे थे, तब भी जब उनमें नॉनजरो डेटा के छोटे रन शामिल थे। यह वह "कचरा" है जिसके बारे में शिकायत शिकायत कर रही है।

    ...
    0000500 0532 0302 0000 0000 0000 0000 0000 0000    # <-- Beginning here...
    0000510 0000 0000 0000 0000 0000 0000 0000 0000
    *
    0001000             # ... almost 3kb of zeros.
    

    आप इससे ऑब्जेक्ट का वास्तविक आकार निर्धारित कर सकते हैं । यहां, यह 0x504 या 1,284 बाइट होगा।

  2. ऑब्जेक्ट की बैकअप प्रतिलिपि बनाएँ। यदि आप शून्य का गलत सेट चुनते हैं, तो आप एक अलग सेट के साथ फिर से कोशिश कर सकते हैं।

    $ cp .git/objects/4b391c2cc93ccc8d2f7262335629a7f81d6bcbe0 ~/old_4b391c2cc93ccc8d2f7262335629a7f81d6bcbe0
    
  3. फ़ाइल को उसकी उचित लंबाई तक काटें।

    $ truncate -s 1284 .git/objects/4b391c2cc93ccc8d2f7262335629a7f81d6bcbe0
    

भ्रष्ट वस्तु को अब ठीक किया जाना चाहिए। यह मानते हुए कि केवल एक ही था, रिपॉजिटरी को क्लोनिंग / पुश / पुलिंग करना चाहिए जो अब अपेक्षित है।

अपने स्रोतों का हवाला देते हुए, मेरा मानना ​​है कि मैंने एक ही मुद्दे का अनुभव किया है, लेकिन मेरे मामले में उबंटू 10.4 (कर्नेल 2.6.32-23-जनरेटर) का उपयोग कर रहा है। इस मामले में, यह एक फाइल सिस्टम बग है जिसे अभी तक ट्रैक नहीं किया गया है। इस विषय पर ecryptfs पर एक खुला मुद्दा है और संबंधित यूनेट थ्रेड भी है । समाधान के रास्ते के साथ, मुझे StackOverflow पर एक आसान उत्तर और सारांश मिला । लिंक किए गए लेख , बहुत ही दिलचस्प था, हालांकि मैं अंत में एक अलग तरह से चला गया।


विशाल इस उत्तर के लिए धन्यवाद। git-remove-trailing-garbage.py (पाठ के साथ आपका लिंक "एक स्क्रिप्ट लिखा था", ऊपर) ने मेरे बेकन को बचा लिया जब मैं उसी ecryptfs बग में गया था जिसका आपने उल्लेख किया था!
एडम मोनसेन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.