2011-11-21 16 views
35

अंतिम अद्यतन पूरा करने के लिए और तय: यहाँ समाधान निकला दो चीजों के एक संयोजन है: Graham Borlandsuggested के रूप में विंडोज Git बजाय Cygwin Git का उपयोग कर, और Git config सेटिंग्स pack.threads = 1 और gc.aggressiveWindow = 150Git अत्यधिक स्मृति का उपयोग जीसी, असमर्थ

मैं एक बड़ी स्थानीय Git भंडार, 40,000 के बारे में प्रतिबद्ध के साथ एक SVN भंडार का एक git svn clone है। मैं इस भंडार से अधिक git gc को चलाने के लिए कोशिश कर रहा हूँ, और कहीं हो रही है:

$ git gc --auto 
Auto packing the repository for optimum performance. You may also 
run "git gc" manually. See "git help gc" for more information. 
Counting objects: 25966, done. 
Compressing objects: 100% (25249/25249), done. 
fatal: Out of memory, malloc failed (tried to allocate 426523986 bytes) 
error: failed to run repack 

मैं Git 1.7.5.1 चल रहा हूँ Cygwin अंदर 4GB रैम के साथ एक 64-बिट डुअल कोर Win7 मशीन पर। .git निर्देशिका वर्तमान में 6.1GB से थोड़ा कम है।

मैं git gc --aggressive होने के बाद की कोशिश की, अगर अधिक पूरी प्रणाली इसे ठीक करने में सक्षम है देखने के लिए है, लेकिन कोई किस्मत: मैं, ऊपर करने के लिए इसी तरह की एक संदेश मिलता है एक ही आकार के साथ प्रयास किया malloc, लेकिन एक काफी अधिक ऑब्जेक्ट गणना (508,485 गिना गया, 493,506 संपीड़ित)।

मैंने Google- मिश्रित twiddles द्वारा [pack] पर .gitconfig फ़ाइल के भाग के अनुसार सुझाव दिया है; another StackOverflow question से सबसे पूरा होना। मेरे .gitconfig अब निम्नलिखित प्रासंगिक लाइनों है, लेकिन इन प्रकट होता है की स्थापना में कोई अंतर नहीं बना दिया है करने के लिए:

[pack] 
     windowMemory = 16m 
     threads = 1 
     window = 1 
     depth = 1 
     deltaCacheSize = 1 

मैं gc मेरी भंडार को git कैसे प्राप्त कर सकते हैं पर कोई सुझाव?

संपादित: Mark Longairsuggested कुछ और .gitconfig फ़ाइल परिवर्तन। जो मैंने बनाया, नीचे नई लाइनें। लेकिन परिवर्तनों ने कोई फर्क नहीं पड़ता।

[core] 
     packedGitWindowSize = 1m 
     packedGitLimit = 256m 
[pack] 
     packSizeLimit = 128m 

संपादित 2: Michael Krelinsuggested स्वैप/पृष्ठ फ़ाइल आकार में वृद्धि (WinXP निर्देश here, और यह Win7 के लिए इसी तरह की है)। मैंने कोशिश की, लेकिन इससे कोई फर्क नहीं पड़ता, और वास्तव में मैंने केवल अधिकतम आकार को बढ़ाया, और ऐसा लगता है कि विंडोज़ ने कभी भी पेज फ़ाइल के आकार को बढ़ाने की कोशिश नहीं की थी।

अब मैं देख रहा हूं कि यह सिग्विन पर या उसके अंदर लगाई गई स्मृति सीमा के कारण हुआ था या नहीं। "लगाया गया" जांचने के लिए, मैं व्यवस्थापक विशेषाधिकारों के साथ सिगविन चलाने की कोशिश कर रहा हूं। "भीतर" की जांच करने के लिए (जो अधिक संभावना दिखता है), मेरे पास Cygwin's maximum memory settings के साथ एक खेल है।

संपादित करें 3: हालांकि मैं सिगविन का उपयोग करना पसंद कर सकता हूं, यह विंडोज गिट क्लाइंट को स्मृति समस्या के साथ ठीक से पता चला है। ऐसा लगता है कि जब मैं अपने भंडार को साफ-सुथरा करता हूं तो मैं उस पर वापस गिर जाऊंगा।

उत्तर

7

आपके पास सिगविन के अंदर ऐसा करने की कोशिश करने के बजाय msysGit जैसे मूल विंडोज क्लाइंट को चलाने में अधिक भाग्य हो सकता है।

+1

विंडोज गिट क्लाइंट का मेरा अनुभव आम तौर पर यह रहा है कि वे स्मृति प्रबंधन को और भी बदतर बनाते हैं- मैं ~ 15,000 प्रतिबद्ध एसवीएन रिपोजिटरी को संभालने के लिए सिगविन गिट प्राप्त करने में सक्षम हूं कि विंडोज गिट क्लाइंट मैंने बार-बार कोशिश की है। फिर भी, एक शॉट के लायक, मुझे लगता है! –

+0

व्ही! जैसा कि मैं सामान्य रूप से विंडोज गिट क्लाइंट का उपयोग करना पसंद नहीं कर सकता, यह ठीक काम करता है। धन्यवाद! –

1

शायद अस्थायी रूप से जीवन से बड़ा एक स्वैप फ़ाइल जोड़ना और कहीं और कुछ कप कॉफी के लिए जाना मदद मिलेगी?

+0

अगर मैं डॉन

[pack] packSizeLimit = 64m threads = 1 

जोड़ने के लिए था ' आज कहीं भी नहीं मिलता, मैं अपने कंप्यूटर को इस शाम को एक विशाल पृष्ठ फ़ाइल के साथ रीबूट कर दूंगा और इसे रात भर छोड़ दूंगा ... –

+0

ओह, मुझे नहीं पता था कि आप विंडोज़ पर थे - मुझे लगता है कि स्वैप फ़ाइल जोड़ना एक है खोल में कुछ आदेशों का मामला। खैर, मुझे आशा है कि यह विंडोज़ पर अभी भी संभव है, लेकिन आप बेहतर तरीके से जानते हैं कि यह कैसे करें ;-) –

+0

कोई भाग्य नहीं। असल में, मैंने उपलब्ध पृष्ठ फ़ाइल स्थान में वृद्धि की, लेकिन विंडोज ने इसका उपयोग करने का फैसला नहीं किया, जो मुझे इंगित करता है कि कुछ सिग्विन मेमोरी सीमा समस्या हो सकती है। मैं अब जांच कर रहा हूं कि ... –

5

कुछ अन्य config विकल्प है कि आप मूलभूत मूल्यों की तुलना में कम करने के लिए सीमित करने की कोशिश करना चाहते हो सकता है शामिल हैं:

  • pack.packSizeLimit
  • core.packedGitWindowSize
  • core.packedGitLimit

... जो सभी कर रहे हैं git config documentation में प्रलेखित। प्रत्येक मामले में यह जांचना महत्वपूर्ण है कि इकाइयों को क्या समझा जाता है, जिसे मैंने अतीत में गलतियां की हैं।

+0

कोई 'core.deltaCacheSize' नहीं है। मुझे संदेह है कि आप 'pack.deltaCacheSize' का जिक्र कर रहे हैं, जिसे मैं पहले ही समायोजित कर रहा हूं। मैं अब बाकी लोगों की कोशिश करूंगा, धन्यवाद, धन्यवाद! –

+0

@me_and: ओह - मैंने इसे अपने उत्तर से हटा दिया है –

+0

कोई भाग्य नहीं। मैं उस नई कॉन्फ़िगरेशन के साथ प्रश्न अपडेट करूंगा जिसका उपयोग मैंने किया था, लेकिन लघु संस्करण यह है कि आपके सुझाए गए परिवर्तनों में से कोई भी स्मृति 'गिट जीसी' आवंटित करने की कोशिश की गई मेमोरी की मात्रा में कोई फर्क नहीं पड़ता। –

9

मुझे एक ही समस्या थी, सफलता के बिना अब तक बताए गए समाधानों का प्रयास किया। लेकिन Git जीसी के साथ अपनी समस्याओं के बाद मैं रेपो के लिए बड़ा छवि फ़ाइलों को जोड़ा शुरू किया, तो मैं .gitattributes फ़ाइल बनाई और उन बड़ी फ़ाइलों के लिए डेल्टा संपीड़न बंद कर दिया:

*.tga -delta 
*.psd -delta 

यह काम किया।

+0

ज़ूम यह काम किया! मुझे एक साझा मेजबान पर मेरे गिट रिपॉजिटरीज़ में बड़ी फ़ाइलों के साथ परेशानी हो रही है जो बहुत अधिक मेमोरी लेने वाली प्रक्रियाओं को मारता है। इसने एक समस्या को हल किया है जो मैंने वर्षों के लिए किया है: डीडीडीडी – scone

+0

बहुत सारे परीक्षण और त्रुटि के बाद, कभी-कभी इसे काम करना पड़ता है और फिर कुछ प्रतिबद्धताओं के बाद रेपो फिर से टूट जाता है, इससे समाधान (अब तक) लाया जाता है। मुझे लगता है कि यह जवाब ऊपर होना चाहिए। –

3

केवल बात यह है कि साझा लिनक्स होस्टिंग पर इस त्रुटि से बचने के लिए मदद करने के लिए

.gitconfig 

सबसे महत्वपूर्ण था, "सूत्र = 1"