2009-06-12 11 views

उत्तर

141

Linus himself से यह संदेश कुछ अन्य सीमा

साथ मदद कर सकता है [...] सीवीएस, यानी यह वास्तव में काफी मॉडल एक "एक समय में एक फ़ाइल " के लिए उन्मुख किया जा रहा समाप्त होता है।

जो अच्छा है कि आप एक लाख फ़ाइलों हो सकता है, और उसके बाद ही उनमें से कुछ बाहर जाँच - तुम कभी नहीं भी अन्य 999,995 फ़ाइलों का प्रभाव दिखाई देगा।

गिट मूल रूप से वास्तव में पूरे रेपो से कम नहीं दिखता है। भले ही आप चीजों को थोड़ा सीमित करें (यानी केवल एक भाग देखें, या इतिहास थोड़ा सा वापस जाएं), गिट अभी भी पूरी चीज, पर ध्यान केंद्रित कर रहा है और ज्ञान को चारों ओर ले जा रहा है।

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

और हाँ, फिर "बड़ी फ़ाइल" समस्याएं हैं। मुझे वास्तव में पता नहीं है कि बड़ी फाइलों के बारे में क्या करें। हम उन पर चूसते हैं, मुझे पता है।

में अधिक देखें मेरी other answer: Git के साथ सीमा नहीं है कि प्रत्येक भंडार एक "coherent set of files", "सभी सिस्टम" अपने आप में से प्रस्तुत करना चाहिए (आप टैग नहीं कर सकते "भंडार का हिस्सा")।
यदि आपका सिस्टम स्वायत्त (लेकिन अंतर-निर्भर) भागों से बना है, तो आपको submodules का उपयोग करना होगा।

Talljoe's answer द्वारा सचित्र के रूप में, सीमा एक प्रणाली एक (फाइल के बड़ी संख्या में), लेकिन अगर आप Git की प्रकृति (अपने SHA-1 कुंजी का प्रतिनिधित्व करती डेटा जुटना के बारे में) समझते हैं, आपको एहसास होगा कि हो सकता है सत्य "सीमा" एक उपयोग एक है: i।ई, आपको गिट रिपोजिटरी में सब कुछ स्टोर करने की कोशिश नहीं करनी चाहिए, जब तक कि आप हमेशा सबकुछ वापस पाने या टैग करने के लिए तैयार न हों। कुछ बड़ी परियोजनाओं के लिए, इसका कोई मतलब नहीं होगा।

:


Git सीमा पर एक अधिक गहराई से देखने के लिए, "git with large files"
(। एक समाधान Git रेपो बाहर बड़ी फ़ाइलों को स्टोर करने के लिए GitHub अप्रैल 2015 जो उल्लेख git-lfs) देखें

तीन मुद्दों है कि एक Git रेपो सीमित करती है:

  • विशाल फ़ाइलें (xdelta for packfile स्मृति में है केवल, जो बड़ी फ़ाइलों के साथ अच्छा नहीं है)
  • बड़ी संख्या में फाइलें, जिसका अर्थ है, एक फ़ाइल प्रति ब्लॉब, और धीमी गिट जीसी एक समय में एक पैकफाइल उत्पन्न करने के लिए।
  • विशाल पैकफाइल, एक पैकफाइल इंडेक्स (विशाल) पैकफाइल से डेटा पुनर्प्राप्त करने के लिए अक्षम है।

    केंद्रीय सर्वर से कुछ एक साथ क्लोन दूसरे उपयोगकर्ताओं के लिए अन्य समवर्ती संचालन धीमा होगा:


अधिक नया धागा (फरवरी 2015) the limiting factors for a Git repo दिखाता है?

क्लोनिंग करते समय सर्वर में कोई ताले नहीं हैं, इसलिए सिद्धांत क्लोनिंग अन्य परिचालनों को प्रभावित नहीं करता है। क्लोनिंग हालांकि बहुत सारी मेमोरी का उपयोग कर सकती है (और बहुत सी सीपीयू जब तक आप पहुंचने योग्य बिटमैप सुविधा को चालू नहीं करते हैं, जो आपको करना चाहिए)।

'git pull' धीमा हो जाएगा?

हम सर्वर साइड बाहर करते हैं, अपने पेड़ के आकार (linux 48k फ़ाइलें हैं) मुख्य कारक है, लेकिन अपने 25k फ़ाइलें ठीक होना चाहिए।

'git push'?

यह एक से कितना गहरा अपने रेपो के इतिहास है, या कैसे व्यापक अपने पेड़ है प्रभावित नहीं है, तो जल्दी होना चाहिए ..

आह refs की संख्या git-push और git-pull दोनों को प्रभावित कर सकते हैं।
मुझे लगता है कि स्टीफन इस क्षेत्र में मुझसे बेहतर जानता है।

'git commit'? (यह reference 3 में धीमी के रूप में सूचीबद्ध है।) 'git status'? (संदर्भ 3 में फिर से धीमा हालांकि मुझे यह नहीं दिख रहा है।)
(भी git-add)

फिर, अपने पेड़ के आकार। आपके रेपो के आकार में, मुझे नहीं लगता कि आपको इसके बारे में चिंता करने की ज़रूरत है।

कुछ ऑपरेशन दिन-प्रतिदिन प्रतीत नहीं होते हैं, लेकिन अगर उन्हें अक्सर वेब फ्रंट-एंड द्वारा गिटलैब/स्टैश/गिटहब आदि कहा जाता है तो वे बाधा बन सकते हैं। (जैसे 'git branch --contains' लगता है बहुत प्रतिकूल शाखाओं की बड़ी संख्या से प्रभावित।)

git-blame धीमी गति से हो सकता है जब एक फाइल एक बहुत संशोधित किया गया है।

+4

@ Thr4wn: गिटप्रो सबमिशन पेज पर और भी अधिक के लिए http://stackoverflow.com/questions/1979167/git-submodule-update/1979194#1979194 देखें। एक छोटे संस्करण के लिए: http://stackoverflow.com/questions/2065559/using-two-git-repos-in-one-folder/2065749#2065749 – VonC

+1

गिट submoules प्रलेखन = http: // git-scm के लिए अद्यतन लिंक। कॉम/बुक/एन/गिट-टूल्स-सबमोड्यूल – JHowIX

+0

मुझे सचमुच आश्चर्य है कि लिनक्स पर इतने सारे स्क्लाइट और कई डेटाबेस विकल्प उपलब्ध हैं, वे बैकअप, प्रतिकृति और स्केल करने में आसान डेटाबेस का उपयोग क्यों नहीं कर सकते। –

29

कोई वास्तविक सीमा नहीं है - सब कुछ 160-बिट नाम के साथ नामित है। फ़ाइल का आकार 64 बिट संख्या में प्रतिनिधित्व योग्य होना चाहिए, इसलिए वहां कोई वास्तविक सीमा नहीं है।

हालांकि, एक व्यावहारिक सीमा है। मेरे पास एक भंडार है जो 880,000 के साथ ~ 8 जीबी है और गिट जीसी में कुछ समय लगता है। काम करने वाला पेड़ इतना बड़ा है कि ऑपरेशन जो निरीक्षण करते हैं तो पूरी कार्यशील निर्देशिका में थोड़ी देर लगती है। यह रेपो केवल डेटा स्टोरेज के लिए उपयोग किया जाता है, हालांकि, यह केवल स्वचालित उपकरण का एक गुच्छा है जो इसे संभालता है। रेपो से परिवर्तन खींचना एक ही डेटा को rsyncing से बहुत तेज है।

%find . -type f | wc -l 
791887 
%time git add . 
git add . 6.48s user 13.53s system 55% cpu 36.121 total 
%time git status 
# On branch master 
nothing to commit (working directory clean) 
git status 0.00s user 0.01s system 0% cpu 47.169 total 
%du -sh . 
29G  . 
%cd .git 
%du -sh . 
7.9G . 
+0

हालांकि सैद्धांतिक सीमाओं के बारे में बात करने के ऊपर एक "अधिक सही" उत्तर है, लेकिन यह उत्तर मेरे लिए अधिक उपयोगी लगता है क्योंकि यह आपकी स्थिति की तुलना आपकी तुलना में करता है। धन्यवाद। – Bananeweizen

3

यह आपके अर्थ पर निर्भर करता है। व्यावहारिक आकार सीमाएं हैं (यदि आपके पास बहुत बड़ी फ़ाइलें हैं, तो यह उबाऊ धीमी हो सकती है)। यदि आपके पास बहुत सी फाइलें हैं, तो स्कैन भी धीमा हो सकता है।

हालांकि मॉडल के लिए वास्तव में अंतर्निहित सीमाएं नहीं हैं। आप निश्चित रूप से इसे खराब तरीके से उपयोग कर सकते हैं और दुखी हो सकते हैं।

1

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

28

यदि आप बहुत बड़ी फ़ाइलें जोड़ते हैं (मेरे मामले में जीबी, सिग्विन, एक्सपी, 3 जीबी रैम), तो इसकी उम्मीद है।

घातक: स्मृति से बाहर, malloc में विफल रहा है

अधिक जानकारी here

अद्यतन 3/2/11: कछुआ Git के साथ विंडोज 7 64 में इसी तरह देखा। स्मृति का टन इस्तेमाल किया, बहुत धीमी प्रणाली प्रतिक्रिया।

1

मेरे पास एक उदार राशि है जो मेरे रेपो में व्यक्तिगत JSON टुकड़ों के रूप में संग्रहीत है। कुछ निर्देशिकाओं के तहत बैठे लगभग 75,000 फाइलें हैं और यह प्रदर्शन के लिए वास्तव में हानिकारक नहीं है।

पहली बार उन्हें जांचना, जाहिर है, थोड़ा धीमा था।

-9

गिट में रेपो के लिए 4 जी (32 बिट) सीमा है।

http://code.google.com/p/support/wiki/GitFAQ

+20

यह Google सीमा की तरह दिखता है, गिट सीमा नहीं। –

16

वापस फरवरी 2012 में, वहाँ एक बहुत ही दिलचस्प thread on the Git mailing list यहोशू रेड्स्तोने, एक फेसबुक सॉफ्टवेयर एक विशाल परीक्षण भंडार पर Git परीक्षण इंजीनियर से था:

परीक्षण रेपो 4 लाख करता है, रैखिक इतिहास और लगभग 1.3 मिलियन फाइलें।

रन जो दिखाए गए थे, दिखाते हैं कि ऐसे रेपो गिट के लिए अनुपयोगी (ठंडा ऑपरेशन स्थायी मिनट) है, लेकिन यह भविष्य में बदल सकता है। असल में प्रदर्शन को कर्नेल एफएस मॉड्यूल में stat() कॉल की संख्या द्वारा दंडित किया जाता है, इसलिए यह रेपो में फ़ाइलों की संख्या और एफएस कैशिंग दक्षता पर निर्भर करेगा। आगे की चर्चा के लिए this Gist देखें।

+2

+1 दिलचस्प। वह गूंज [गिट सीमाओं के बारे में मेरे अपने उत्तर] (http://stackoverflow.com/a/19494211/6309) बड़ी फ़ाइलों/फ़ाइलों/पैकफाइलों की संख्या पर सीमाओं का विवरण देता है। – VonC

1

मुझे यह एक रेपो में बड़ी संख्या में फाइलों (350k +) को स्टोर करने की कोशिश कर रहा है। हाँ, स्टोर करें। हंसते हुए कहते हैं।

$ time git add . 
git add . 333.67s user 244.26s system 14% cpu 1:06:48.63 total 

Bitbucket documentation से निम्नलिखित अर्क काफी दिलचस्प हैं।

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

... 94% बिटबकेट ग्राहकों में 500 एमबी से कम रिपोजिटरी हैं। लिनक्स कर्नेल और एंड्रॉइड दोनों 900 एमबी के तहत हैं।

उस पृष्ठ पर अनुशंसित समाधान आपके प्रोजेक्ट को छोटे हिस्सों में विभाजित करना है।

+0

मुझे लगता है कि यह काफी पुराना है। अभी, उस साइट पर एंड्रॉइड (न ही लिनक्स) रेपो के बारे में कुछ भी नहीं है जो आप लिंक कर रहे हैं। लेकिन मुझे आश्चर्य है कि क्या यह तब भी गलत नहीं था? जैसे [इस उत्तर] की तुलना करें (https://stackoverflow.com/a/31730316/4190925)। शायद वे कुछ और मतलब था? – jjj

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