2010-06-22 14 views
26

मैं एक साझा मेजबान पर एक गिट रेपो होस्ट कर रहा हूं। मेरे रेपो में इसमें बहुत बड़ी फाइलें हैं, और हर बार जब मैं रेपो पर "गिट जीसी" चलाने की कोशिश करता हूं, तो मेरी प्रक्रिया को साझा होस्टिंग प्रदाता द्वारा बहुत अधिक मेमोरी का उपयोग करने के लिए मार दिया जाता है। जीआईटी जीसी उपभोग कर सकते हैं कि स्मृति की मात्रा को सीमित करने का कोई तरीका है? मेरी आशा यह होगी कि यह गति के लिए स्मृति उपयोग का व्यापार कर सकती है और इसके काम को करने में थोड़ी देर लग सकती है।क्या "git gc" का उपयोग करने वाली स्मृति की मात्रा को सीमित करने का कोई तरीका है?

+1

अंतिम संबंधित: http://stackoverflow.com/a/10293304/274502 – cregox

+0

हां, ड्रीमहोस्ट पर एक समान समस्या थी (जिसे इस प्रश्न के साथ लेबल किया गया है)। 'गिट' की हत्या के दौरान इतने सारे मामले नहीं थे, लेकिन' डार्क्स '(एक और वीसीएस) हमेशा मारे गए, इसलिए यह http://Dreamhost.com –

उत्तर

14

हाँ, git config के लिए मदद पृष्ठ पर एक नजर है और, विशेष रूप से pack.depth, pack.window, pack.windowMemory और pack.deltaCacheSizepack.* विकल्पों को देखने।

यह एक पूरी तरह से सटीक आकार के रूप में Git स्मृति में प्रत्येक वस्तु मैप करने के लिए तो एक बहुत बड़ी वस्तु खिड़की और डेल्टा कैश सेटिंग्स की परवाह किए बिना स्मृति के उपयोग का एक बहुत पैदा कर सकता है की जरूरत नहीं है।

आपके पास स्थानीय भाग पैकिंग बेहतर हो सकती है और "फ़ाइलों को मैन्युअल रूप से" फ़ाइलों को ट्रांसफर कर सकती है, .keep फाइलें जोड़ती हैं ताकि रिमोट गिट पूरी तरह से सब कुछ ठीक करने की कोशिश न करे।

5

तुम सिर्फ उन pathnames धब्बे के लिए डेल्टा संपीड़न निष्क्रिय करने के लिए डेल्टा विशेषता बंद कर देते हैं इस्तेमाल कर सकते हैं:

foo/.git/info/attributes में (या foo.git/info/attributes अगर यह एक नंगे भंडार है) (gitattributes में डेल्टा प्रविष्टि देखें और gitignore देखना पैटर्न वाक्यविन्यास के लिए):

/large_file_dir/* -delta 
*.psd -delta 
/data/*.iso -delta 
/some/big/file -delta 
another/file/that/is/large -delta 

यह भंडार के क्लोन को प्रभावित नहीं करेगा। अन्य भंडारों (यानी क्लोन) को प्रभावित करने के लिए, गुणों को info/attributes फ़ाइल के बजाय (या इसके अतिरिक्त) .gitattributes फ़ाइल में डाल दें।

+0

पर अनुपयोगी है, यह अब तक का सबसे उपयोगी उत्तर है जहां बड़ी फाइलें चिंतित हैं। धन्यवाद। मेरे पास कुछ PSDs का रेपो है, और यह गिट जीसी करने के लिए स्मृति के गीगाबाइट्स लेता था, अब इसमें 100 एमबी रैम होता है। ठंडा। –

30

मैंने इस link से निर्देशों का उपयोग किया। Charles Baileys के समान विचार।

आदेशों की एक प्रति यहां है:

git config --global pack.windowMemory "100m" 
git config --global pack.packSizeLimit "100m" 
git config --global pack.threads "1" 

इस साझा होस्टिंग खाते के साथ hostgator पर मेरे लिए काम किया।

+2

धन्यवाद! यह मेरे लिए काम करता है, लेकिन मुझे लगता है कि दूसरी पंक्ति में एक टाइपो है - कोई साइजलिमिट विकल्प नहीं है; इसे पढ़ना चाहिए: गिट कॉन्फ़िगरेशन --global pack.packSizeLimit "100m" – Max

+1

यह पूरी तरह से काम करता है। यदि यह पहले काम नहीं करता है, तो windowMemory और packSizeLimit पर निचली सीमा का प्रयास करें। मेरे मामले में, 25 मीटर मीठा स्थान था। – jsapara

+0

मैंने विकल्प का नाम बदल दिया। मूल लिंक टूटा हुआ है, यह सुनिश्चित नहीं है कि इसे कहां इंगित करें। – phunehehe

8

Git repack की स्मृति उपयोग है: (pack.deltaCacheSize + pack.windowMemory) × pack.threads। प्रासंगिक डिफ़ॉल्ट 256 एमआईबी, असीमित, एनप्रोक हैं।

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

डिफ़ॉल्ट रूप से विंडो मेमोरी pack.window (gc.aggressiveWindow) से सीमित है। इस तरह पैकिंग सीमित करना एक बुरा विचार है, क्योंकि कामकाजी सेट आकार और दक्षता व्यापक रूप से भिन्न हो जाएगी। खिड़की के आकार को सीमित करने के लिए दोनों उच्च मूल्यों को बढ़ाने और pack.windowMemory पर भरोसा करना सबसे अच्छा है।

अंत में, थ्रेडिंग को कार्य सेट को विभाजित करने का नुकसान होता है। pack.threads को कम करना और pack.windowMemory बढ़ाना ताकि कुल रहता है, रन रन को बेहतर बनाना चाहिए।

मरम्मत में अन्य उपयोगी ट्यूनेबल (pack.depth, pack.compression, बिटमैप विकल्प) हैं, लेकिन वे स्मृति उपयोग को प्रभावित नहीं करते हैं।

+0

पूर्ण सत्य प्रतीत नहीं होता है? क्या आपके पास कोई विचार है: http://stackoverflow.com/questions/42175296/git-gc-uses-a-lot-of-memory-even-i-limited-it – Alex

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

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