2011-01-28 19 views
53

में विफल रहता है मेरे पास सीमित स्मृति वाले सर्वर पर एक गिट रिपोजिटरी है। जब मैं सर्वर मैं निम्न त्रुटिगिट भंडार का पुनर्विक्रय

[email protected]:$ git clone ssh://[email protected]/home/hemi/repos/articles 
Initialized empty Git repository in /home/hemi/Skrivebord/articles/.git/ 
[email protected]'s password: 
remote: Counting objects: 666, done. 
remote: warning: suboptimal pack - out of memory 
remote: fatal: Out of memory, malloc failed 
error: git upload-pack: git-pack-objects died with error. 
fatal: git upload-pack: aborting due to possible repository corruption on the remote side. 
remote: aborting due to possible repository corruption on the remote side. 
fatal: early EOF 
fatal: index-pack failed 
[email protected]:$ 

इस त्रुटि मैं मूल भंडार repack की कोशिश की है संभालने के लिए मिल से एक मौजूदा भंडार क्लोन करने की कोशिश (this forum post के अनुसार)। लेकिन भंडार को दोबारा बदलने के बजाय यह वर्णन करता है कि "गिट पैक-ऑब्जेक्ट्स" कमांड का उपयोग कैसे करें।

[email protected]:~/repos/articles$ git repack -a -d --window-memory 10m --max-pack-size 100m 
usage: git pack-objects [{ -q | --progress | --all-progress }] 
     [--all-progress-implied] 
     [--max-pack-size=N] [--local] [--incremental] 
     [--window=N] [--window-memory=N] [--depth=N] 
     [--no-reuse-delta] [--no-reuse-object] [--delta-base-offset] 
     [--threads=N] [--non-empty] [--revs [--unpacked | --all]*] 
     [--reflog] [--stdout | base-name] [--include-tag] 
     [--keep-unreachable | --unpack-unreachable 
     [<ref-list | <object-list] 

गिट 1.6.5.7 सर्वर पर स्थापित है।

उत्तर

94

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

git config pack.windowMemory 10m 
git config pack.packSizeLimit 20m 

आप अपने स्थानीय भंडार पर भी ऐसा ही कर सकते हैं। (संयोग से मुझे लगता है कि है कि या तो अपने भंडार बहुत बड़ी है या इन छोटे स्मृति के साथ मशीनें हैं -। ये मान मेरे लिए बहुत कम लग रहे हैं)

क्या यह जब बहुत में बड़े खजाने repacking पर malloc विफलताओं हो रही लायक है, के लिए अतीत में, मैं भी core.packedgitwindowsize, core.packedgitlimit, core.deltacachesize, pack.deltacachesize, pack.window और pack.threads के मूल्यों को बदल दिया है, लेकिन के रूप में यदि आपके पास कोई और विकल्प :)

+2

कॉन्फ़िगरेशन विकल्पों के लिए धन्यवाद, मुझे इससे पहले पता नहीं था। भंडार में पीडीएफ फ़ाइलों का एक बड़ा सेट होता है। भंडार का कुल आकार (.git निर्देशिका और ट्रैक की गई फ़ाइलों सहित) 1.1 जीबी अनुमोदित है। तो मुझे लगता है कि यह एक बड़ी भंडार है ;-) – midtiby

+0

@ मार्क लॉन्गियर: आपने मेरा दिन सर बचाया! मैं स्टोर में भागने वाला था और कुछ रैम अपग्रेड खरीद रहा था: डी –

+0

@ मार्क लॉन्गियर: ग्रेट उत्तर !!! इस तरह की एक उपयोगी जानकारी के लिए धन्यवाद – nish

1

मैं गिट संस्करण 1.7.0.4 का उपयोग कर रहा हूं और यह इस आदेश को स्वीकार करता है। यह संभव है कि गिट संस्करण 1.6 इस कमांड को स्वीकार नहीं करता है।

कुछ यादृच्छिक कामों के साथ एक नया भंडार बनाने का प्रयास करें। फिर इसे इस आदेश के साथ दोबारा दोहराएं।

+0

क्या आप इस कमांड के बारे में बात कर रहे हैं? 'git repack -a -d - विन्डो-मेमोरी 10 मीटर - मैक्स-पैक-आकार 100 मीटर' – Flimm

15

मैंने निम्नलिखित चरणों का उपयोग कर समस्या हल की।

  1. गॉट भंडार सर्वर से अपने स्थानीय मशीन के लिए बाहर की जाँच की
  2. सर्वर पर स्थानीय भंडार
    git repack -a -d --window-memory 10m --max-pack-size 20m
  3. एक खाली भंडार (SSH पर एक कच्चे प्रति का उपयोग कर) repacked बनाया
    git init --bare
  4. स्थानीय भंडार को सर्वर
  5. पर पहुंचाया गया है कि सर्वर रिपॉजिटरी
  6. क्लोन करना संभव है
+4

मुझे यह सुनकर खुशी हुई कि आपको यह सॉर्ट किया गया है, लेकिन मुझे आपको चेतावनी दी जानी चाहिए कि आपको एक ही समस्या फिर से होगी सर्वर अपने भंडार repack करने का फैसला करता है। रिमोट रिपोजिटरी में कॉन्फ़िगरेशन विकल्प सेट करना सबसे अच्छा होगा (उदा। मेरे उत्तर में सुझाए गए अनुसार) ताकि जब यह स्वचालित रूप से रीपैक हो जाए, तब भी आप स्मृति से बाहर नहीं होंगे। –

+0

धन्यवाद, यह काम – VolArt

5

इस सवाल का जवाब नहीं है की जरूरत नहीं है यह लगता है, लेकिन किसी को हो सकता है इसमें चलाएं: pack-objects किसी प्रकार की मेमोरी किलर द्वारा समाप्त होने पर सर्वर पर रीपैकिंग भी विफल हो सकती है (जैसे Dreamhost पर इस्तेमाल किया एक के रूप में):

$ git clone project-url project-folder 
Cloning into project-folder... 
remote: Counting objects: 6606, done. 
remote: Compressing objects: 100% (2903/2903), done. 
error: pack-objects died of signal 9284.51 MiB | 2.15 MiB/s 
error: git upload-pack: git-pack-objects died with error. 
fatal: git upload-pack: aborting due to possible repository corruption on the remote side. 
remote: aborting due to possible repository corruption on the remote side. 
fatal: early EOF 
fatal: index-pack failed 

Dreamhost पर इस mmap की वजह से प्रतीत होता है।कुछ फ़ाइलों की सामग्री को स्मृति में मैप करने के लिए रेपैक कोड mmap का उपयोग करता है, और जैसा कि मेमोरी किलर पर्याप्त स्मार्ट नहीं है, यह एमएमएपी फाइलों को इस्तेमाल की गई स्मृति के रूप में गिना जाता है, जब यह mmap को एक बड़ी फ़ाइल की कोशिश करता है तो गिट प्रक्रिया को मारता है।

समाधान mmap समर्थन बंद (configure NO_MMAP=1) के साथ एक कस्टम गिट बाइनरी संकलित करना है।

+0

क्या आप जानते हैं कि मौजूदा गिट इंस्टॉल में NO_MMAP = 1 विकल्प जोड़ना संभव है? –

+1

मुझे ऐसा नहीं लगता है, यह एक प्रीप्रोसेसर मैक्रो के रूप में दिखता है जो विभिन्न कोड उत्पन्न होता है। लेकिन यह सिर्फ एक राय है, मैंने इसका शोध नहीं किया। बहुत सारे काम के लिए अंतिम उपाय के रूप में – zoul

16

भंडार की कोई सीधी पहुंच नहीं है और इसलिए एक उथल-पुथल करने में असमर्थ होने के कारण, एक उथले क्लोन का प्रदर्शन करते हैं और फिर धीरे-धीरे मेरे लिए मदद करते समय धीरे-धीरे लाने में मदद मिलती है।

git clone YOUR_REPO --depth=1 
git fetch --depth=10 
... 
git fetch --depth=100 
git fetch --unshallow //Downloads all history allowing to push from repo 

आशा है कि यह अभी भी किसी की मदद कर सकता है।

+0

, यह वास्तव में काम करता था। धन्यवाद। –

+1

'गिट क्लोन REPO --depth = 1' अभी भी त्रुटि के साथ विफल रहा है 'रिमोट: रिमोट साइड पर संभावित भंडार भ्रष्टाचार के कारण निरस्त करना।' – Flimm

0

मुझे एक निजी github.com भंडार पर गिट 2.1.0 के साथ उबंटू 14.10 पर एक ही समस्या थी। (! Entreprise रूटर संदेह है, अलग अलग वाईफाई नेटवर्क पर काम करता है कार्यस्थल पर छोड़कर)

* GnuTLS recv error (-54): Error in the pull function. 
* Closing connection 2jects: 31% (183/589) 
error: RPC failed; result=56, HTTP code = 200 
fatal: The remote end hung up unexpectedly 
fatal: protocol error: bad pack header 

मेरे समाधान था, ssh का उपयोग कर क्लोन git करने के लिए (मैं SSH कुंजियों की स्थापना * पहले से), इस तरह:

Git क्लोन https://github.com/USERNAME/REPOSITORYNAME.git

हो जाता है:

Git क्लोन [email protected]: USERNAME/REPOSITORYNAME.git

*: (एक ssh कुंजी जेनरेट)

ssh-keygen आयकर आरएसए -सी "[email protected]"

फिर गीथब में लॉग इन करें, सेटिंग्स में, एसएसएच कुंजी आयात करें, और इसे ~/.ssh/id_rsa.pub से आयात करें।

+0

मैंने एंटरप्राइज़ राउटर सामग्री स्कैनिंग और HTTP के लिए कनेक्शन छोड़ने के बारे में सुना है, लेकिन कभी भी HTTPS नहीं - क्या आपका डीकोड होता है और HTTPS ट्रैफ़िक को फिर से एन्क्रिप्ट करता है? – Rup

+0

रुप: इंटरनेट पर आने से पहले दो राउटर शामिल हैं। अगले हफ्ते, मैं जांच करूँगा कि उस विशेष कंपनी में सेटअप कैसा है। मैंने तब से सत्यापित किया है, यह उस विशिष्ट कंपनी पर कहीं और विफल नहीं है (कोई अन्य वाईफाई नेटवर्क)। – arcol

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