2013-06-01 6 views
12

मैं एक ऐसे प्रोजेक्ट पर काम कर रहा हूं जहां संस्करण नियंत्रण प्रणाली एसवीएन है और मैं गिट का उपयोग करना चाहता हूं। मैंने एक गिट एसवीएन क्लोन किया लेकिन git status बहुत धीमी गति से काम करता है (लगभग 8 मिनट)। भंडार में लगभग 63000 फाइलें हैं और उनमें से अधिकांश पुस्तकालयों को गिट द्वारा अनदेखा कर रहे हैं। क्या यह सामान्य है? मैंने पहुंचने योग्य वस्तुओं और कचरा संग्रहण की सफाई करने के लिए git prune && git gc किया था। मैंने git repack -Adf भी किया लेकिन इससे चीजों को और भी बदतर बना दिया। इसमें और भी अधिक समय लगता है (20 मिनट से अधिक)।गिट स्थिति बहुत लंबी लगती है

मैं क्या गलत कर रहा हूं? यह एक दृश्य स्टूडियो प्रोजेक्ट है और मुझे लगता है कि .gitignore फ़ाइल में सही चीजें नहीं हैं। क्या यह पता लगाना संभव है कि विज़ुअल स्टूडियो बिल्ड से कौन सी फाइलें उत्पन्न की गई हैं और जिन्हें संस्करणित किया जाना है?

यदि .gitignore फ़ाइल समस्या नहीं है, तो मैं अपने git status तेज़ी से कैसे बना सकता हूं, क्या यह एक परियोजना के लिए 65000 फाइलों (लगभग 10 जीबी) के साथ सामान्य है, जो गिट के साथ धीमा काम करता है?

+1

मुझे यह भी पता चला है कि कुछ विंडोज वातावरण में गिट धीमा है। आप पर ध्यान दिया है http://stackoverflow.com/questions/4485059/git-bash-is-extremely-slow-in-windows-7-x64?lq=1 और http://stackoverflow.com/questions/2835775/ msysgit-बैश-है-horrendously धीमी-इन-windows-7? एलक्यू = 1? –

+0

जब यह पूरा हो जाता है तो 'गिट स्थिति' प्रदर्शित करता है? –

+0

@me_and यह सामान्य "प्रतिबद्ध करने के लिए कुछ भी नहीं" संदेश प्रदर्शित करता है, यह बहुत लंबा लगता है –

उत्तर

5

उस आकार के भंडार के लिए, git status और संबंधित आदेश बहुत धीमे हो सकते हैं। गिट बहुत बेहतर काम करता है जब परियोजनाओं को अलग-अलग छेड़छाड़ की जाती है और अलग किया जाता है, जबकि सबवर्जन कई परियोजनाओं वाले सिंगल बेहेमोथ रिपोजिटरीज का उपयोग करके प्रोत्साहित करता है, इसलिए गिट-एसवीएन का उपयोग करते समय इस तरह की समस्या असामान्य नहीं है।

  • तुम नहीं पहले से ही एक चुंबकीय डिस्क एक ठोस राज्य डिस्क के बजाय का उपयोग कर के लिए नवीनीकरण किया है:

    बहरहाल, वहाँ कुछ अलग समाधान आप चीजों को तेजी लाने के लिए उपयोग कर सकते हैं कर रहे हैं। जब मैंने एक समान भंडार

  • git help svn के कॉन्फ़िगरेशन अनुभाग को देखें, तो इस एकल परिवर्तन ने गिट की गति में भारी अंतर किया। यह सब रिपॉजिटरी के बजाय सबवर्जन रिपोजिटरी (जैसे trunk/project-a, branches/*/project-a, tags/*/project-a, ...) में ट्रैक उपफोल्डर्स का उपयोग करने के लिए गिट-एसवीएन सेट करने का वर्णन करता है। यदि यह आपके भंडार के लिए समझ में आता है, तो इसका मतलब यह होगा कि आपके पास बहुत छोटे चेकआउट और git status के इतने तेज़ रन हो सकते हैं।

  • git help read-tree के स्पैस चेकआउट अनुभाग को देखें। यह एक सबवर्सन स्पैस चेकआउट के समान, एक स्पैस काम करने वाली प्रति का उपयोग करने के लिए गिट की स्थापना के माध्यम से आपसे बात करेगा। दोबारा, इसका मतलब है कि आपकी कामकाजी प्रति में गिट की ट्रैकिंग कम होगी, और इसलिए उन सभी की जांच फिर से तेज हो जाएगी।

  • अपनी कार्यशील प्रतिलिपि के बड़े वर्गों पर "अपरिवर्तित" ध्वज सेट करने पर विचार करें। यह गिट को यह बताएगा कि फाइलें बदल गई हैं या नहीं। ऐसा करने के दो तरीके:

    find <folder-name>... -type f -exec git update-index --assume-unchanged {} + 
    
  • पूरे भंडार के लिए ध्वज सेट करने के लिए (ध्यान दें कि यह अप्रतिबद्ध खो देंगे:

    1. निम्नलिखित की तरह कुछ चलाने के विशिष्ट फ़ोल्डरों के लिए ध्वज सेट करने के लिए, परिवर्तन):

      git config core.ignorestat true 
      git reset --hard HEAD 
      

    01 में --assume-unchanged विकल्प पर एक नज़र डालें इन कामों के बारे में कुछ और जानकारी के लिए git help config मेंऔर config.ignoreStat अनुभाग।

    इन का उपयोग करना मतलब होगा कि आप स्पष्ट रूप git diff और git add तरह आदेशों का पथ निर्दिष्ट करने के लिए, यानी जरूरत है एक नंगे git diff की तरह आदेश, git commit -a & ग काम नहीं करेगा।

  • अपने ऑपरेटिंग सिस्टम और/या फ़ाइल सिस्टम को बदलें। Git आदमी पृष्ठों (पिछले बुलेट में के रूप में ही वाले) के अनुसार, विंडोज 'lstat, धीमी है के रूप में CIFS फाइल सिस्टम है। मुझे संदेह है कि आदर्श लिनक्स या कुछ अन्य * निक्स पर ext3 या ext4 जैसा कुछ है।

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