2012-04-15 14 views
12

GIT रिबेस एकाधिक 0.5GB बाइनरी पर घातक फ़ाइलें

मैं के रूप में मेरे 'SECC' शाखा से एक रिबेस करने का प्रयास कर रहा हूँ [यह सवाल अनिवार्य रूप से git crash during rebase जो एक जवाब नहीं था फिर से खोलने है]:

$ git rebase main 
First, rewinding head to replay your work on top of it... 
fatal: Out of memory, malloc failed (tried to allocate 553656577 bytes)   # about 0.5 GB 
$ git rebase --abort 
No rebase in progress? 

विफलता इस तथ्य से संबंधित है कि दोनों शाखाओं और उनके सामान्य पूर्वजों में तीन .dat फ़ाइलें हैं जिनमें से प्रत्येक 0.5 जीबी है।

मैं इस स्थिति में एक रिबेस कैसे कर सकता हूं?

अतिरिक्त जानकारी:

  • ए 'Git मुख्य विलय सिर्फ ठीक काम करता है।
  • बढ़ाना। * * .dat merge = keepTheirs 'के साथ gitattributes घातक को नहीं रोका।
  • * .dat फ़ाइलें अलग-अलग होती हैं।
  • मैं दूसरों को दोबारा जोड़ने के लिए * .dat फ़ाइलों को हटाने के लिए तैयार हूं और फिर * .dat वापस जोड़ें। पर कैसे?
  • मैं Git 1.7.9.4
+0

क्या आप वर्तमान शाखा के लिए पैच बना सकते हैं, जहां से आप रीबेज करने का प्रयास कर रहे हैं, वहां से शाखा को फिर से बना सकते हैं, और पैच लागू कर सकते हैं? – vcsjones

+0

क्या आप एक वीडियो फ़ाइल या कुछ नियंत्रित करने वाले संस्करण हैं? – KurzedMetal

+0

वे एक परीक्षण वातावरण स्थापित करने के लिए उपयोग की जाने वाली फ्लैश मेमोरी छवियां हैं। लेकिन कोई फर्क नहीं पड़ता, वे अब स्रोत नियंत्रण में हैं और स्रोत नियंत्रण के तहत बाकी सब कुछ के साथ पुनर्जीवित करने की जरूरत है। – GoZoner

उत्तर

1

उपयोग कर रहा हूँ अगर आपकी मशीन 'Git रिबेस' पर लेकिन उस समय आपके निर्देशिका एक munged अवस्था में है द्वारा नाकाम रहने तक काफी बड़ा है तुम्हें पता नहीं होगा। रिबेस के दौरान एक और शाखा की जांच की गई (मुख्य) ताकि 'सीसीसी' परिवर्तनों को लागू किया जा सके। वसूली, और के साथ आगे बढ़ना:

git checkout secc 

रिबेस पर विफल रही है, के रूप में कि आपने ध्यान दिया आपके पास दो विकल्प मिल गया है:

  1. तो रिबेस आवश्यकता नहीं है, के साथ जाना 'Git मुख्य विलय'
  2. एक बड़ा मशीन प्राप्त करें और पुन: प्रयास 'Git मुख्य rebase'

आप 0.5GB फ़ाइलों को अनदेखा रिबेस करते हैं, और फिर उन Giga फ़ाइलें वापस पाने के लिए एक व्यावहारिक विकल्प नहीं है।

1

टिप्पणियों में आपने कहा है कि 32 जीबी में इस मामले में स्मृति के साथ ऐसा करने के लिए, स्मृति ने इस मुद्दे को हल किया है। उस पर आधारित, मैं निष्कर्ष निकालूंगा कि जिस मशीन पर आपने पहली बार कोशिश की थी उस पर ऐसा करने के लिए आपके पास बहुत कम स्मृति उपलब्ध थी।

+1

देख रहा है जब कोई प्रोग्राम क्रैश हो जाता है और एक ट्रैश किए गए राज्य (लेकिन पुनर्प्राप्त करने योग्य) में आपकी कार्यशील निर्देशिका को छोड़ देता है, जिसके बाद आप कह सकते हैं 'ओह, मुझे एक बड़ी मशीन चाहिए " - ठीक है कि कोई समाधान नहीं है। – GoZoner

+0

समस्या बहुत कम स्मृति उपलब्ध है और बी) गिट इसे अनुचित तरीके से संभालने में सक्षम है। ए) हम कुछ कर सकते हैं, बी) शायद कुछ ऐसा है जो गिट डेवलपर्स – eis

+0

को सूचित किया जाना चाहिए। .. बेशक, यह पहले से ही गिट के नवीनतम संस्करण में तय हो चुका है। हालांकि, अगर यह गहराई से असफल हो जाए, तो भी आपको ऐसा करने के लिए बहुत कम स्मृति होगी। – eis

0

.git/info/attributes में इन डाल प्रयास करें:

# whatever gets them... 
yourfile binary -delta merge=binary 
*.yourext binary -delta merge=binary 

कि इस विलय के विरोध करता है, तो उन फ़ाइलों को बदलने का कारण बन जाएगा, और तुम क्या उन लोगों के साथ क्या करना है यह पता लगाने की करनी होगी। अन्य विलय रणनीतियों के लिए gitattributes और रीबेज दस्तावेज़ की जांच करें, मैं यहां खतरनाक लोगों का नाम भी नहीं दे रहा हूं।

मुझे यकीन नहीं है कि यह मूल मर्ज चलने से कोर में पूरी चीज प्राप्त करने का प्रयास कर रहा है, लेकिन यह एक कोशिश के लायक लगता है।

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