Git Status पूरा होने में एक लंबा समय लेता है


85

मैं gitएक विंडोज मशीन पर एक स्थानीय निर्देशिका में फ़ाइलों का प्रबंधन करने के लिए उपयोग कर रहा हूं - कोई नेटवर्क यहां शामिल नहीं है, मैं किसी अन्य मशीन से / को धक्का नहीं दे रहा / खींच रहा हूं। मेरी निर्देशिका में शायद 100 फाइलें हैं, सभी परीक्षण फाइलें, बहुत छोटी। जब मैं दौड़ता हूं git status, तो इसे नियमित रूप से पूरा होने में 20-30 सेकंड लगते हैं। क्या यह सामान्य है? क्या ऐसा कुछ है जिसे मैं इसे गति देने के लिए कर सकता हूं, या यह देखने का एक बेहतर तरीका है कि मेरी रिपॉजिटरी की स्थिति क्या है (परिवर्तित फाइलें, अनट्रैक की गई फाइलें, आदि)? अन्य gitकमांड बहुत तेजी से पूरा होने लगते हैं।


आप किस git वर्जन का उपयोग कर रहे हैं? कृपया msysGit Google समूह पर सहायता मांगने पर विचार करें, या git मेलिंग सूची (git [at] vger.kernel.org पर, आपको सदस्यता लेने की आवश्यकता नहीं है), शायद यह git में बग है।
जकुब नारबस्की

जवाबों:


128

क्या आपने git gc की कोशिश की है ? यह गिट रेपो से बाहर cruft को साफ करता है।


3
ऐसा लगता है कि चाल चली गई है। मैं बहुत आश्चर्यचकित हूँ कि केवल एक दो के बाद कि रिपॉजिटरी में इतना सामान होगा जिसे साफ किया जा सकता है - धन्यवाद!
मैट मैकिन जूल 27'09

4
हे, मैं सिर्फ कमांड git statusका उपयोग करके भागा timeऔर 30.464 का "वास्तविक" समय प्राप्त किया। मैं तो भाग गया git gcतो time git statusएक बार फिर और 35.409s की एक वास्तविक समय मिला है। बहुत अजीब है।
रयानस्कॉटलेविस

14
इसने मुझे 33 सेकंड से 1 सेकंड से भी कम समय में मेरी अधिकांश रिपोजिटरी के लिए तय कर दिया। यह अच्छा होगा यदि गिट आपको बताएंगे कि जब आप उस बिंदु पर पहुंचना शुरू करते हैं। मुझे कभी नहीं पता था कि इसकी जरूरत है।
XP84

git statusएक पंक्ति में कई बार दौड़ने पर , बाद के रन पहले वाले के थोड़े ही हिस्से को लेते हैं। इसलिए, यदि आप भाग रहे हैं git status, तो फिर git gcऔर git statusफिर, यह उम्मीद है कि यह सुपर जल्दी चलेगा।
kivic

7

इसी तरह के एक मुद्दे पर मैंने पाया कि मेरे मौजूदा git रेपो के नीचे एक डायरेक्टरी में git रेपो होने से बड़े पैमाने पर मंदी हुई।

मैंने द्वितीयक गिट रेपो को कहीं और स्थानांतरित कर दिया और अब गति तेज है!


मैं इसी तरह की समस्या को जोड़ता हूं। एक उपनिर्देशिका में git init को क्या ख़ुशी मिलती है। उस की समस्या तब है, उपडायर्न एक तरह का छिपा हुआ है (आपको बदलाव देखने के लिए अंदर git स्टेटस करने की जरूरत है) लेकिन मुझे लगता है कि git अभी भी उन्हें कंपीट करने की कोशिश कर रहा है। मैं उपधीर की उपेक्षा करता हूं और अब सब कुछ ठीक है।
mb14

6

क्या आप किसी प्रकार के वायरस सुरक्षा सॉफ़्टवेयर का उपयोग कर रहे हैं? हो सकता है कि वह चीजों में हस्तक्षेप कर रहा हो। git1000 की फाइलों के भंडार के साथ खिड़कियों पर मेरे लिए बहुत तेज है।


1
हां, नियोक्ता ने TrendMicro OfficeScan को अनिवार्य किया है। मैंने वायरस स्कैनर को मार दिया, समान स्थिति जीआईटी स्थिति के साथ।
मैट मैकिन जूल 26'09

1
इस थीम का एक और वेरिएंट ऑन-द-फ्लाई एन्क्रिप्शन सॉफ्टवेयर है जैसे कि क्रेडेंट, जो आपके बॉक्स को उल्लेखनीय रूप से धीमा बना सकता है।
डॉन ब्रैनसन

मेरे लिए यही समस्या थी। Kaspersky एंटीवायरस को मार डाला और स्थिति <1 सेकंड में वापस आ गई थी।
रॉबिन विंसलो

5

क्या आपने पुनः प्रयास किया है? गिट-रेप

अन्यथा, निर्देशिका को डुप्लिकेट करने का प्रयास करें, और डुप्लिकेट निर्देशिका में .git फ़ोल्डर को हटा दें। फिर एक नई गिट निर्देशिका बनाएं और देखें कि क्या यह अभी भी धीमा है।

यदि यह अभी भी धीमा है, तो यह एक सिस्टम या हार्डवेयर समस्या जैसा लगता है। Git ने 5 सेकंड से भी कम समय में मेरे लिए सैकड़ों फाइलों पर स्टेटस पूरा किया।


repack मदद करने के लिए लग रहा था - इसे चलाने के बाद, मैंने स्थिति संभाली, और यह तुरंत वापस आ गया। हालांकि, मैंने कुछ सेकंड इंतजार किया और फिर से स्थिति संभाली, और इसमें 30 सेकंड लगे। मैंने निर्देशिका को डुप्लिकेट करने की कोशिश की, और वही समस्या आई।
मैट मैकिन जूल 26'09

हां दिलचस्प। क्या आपके पास बाहरी ड्राइव है? या USB फ्लैश स्टिक? वहां पर रेपो को कॉपी करने की कोशिश करें और देखें कि क्या कोई अंतर है। यह संभव है कि वर्तमान में इस अभियान के साथ कोई समस्या है।
thedz

USB ड्राइव पर कोई अंतर नहीं है।
मैट मैकिन जूल 26'09

यह वास्तव में अजीब है। मैं वास्तव में इस बिंदु पर कह सकता हूं कि मुझे नहीं पता है। आप अपने रेपो की प्रतिलिपि बनाकर किसी और के कंप्यूटर पर आज़मा सकते हैं - जो कि कम से कम आपको बताए कि क्या यह आपके सिस्टम के लिए समस्या है।
thedz

4

किसी कारण git statusसे रिपॉजिटरी फ़ोल्डर को किसी नए स्थान पर ले जाने या कॉपी करने के बाद विशेष रूप से धीमा है।

इस मामले में बाद के रन आमतौर पर तेज होते हैं।


1
क्या पहले रन में इस सुस्ती से बचने का कोई तरीका है? मैंने git gc की कोशिश की, लेकिन यह मदद नहीं की। यह कोई समस्या नहीं है क्योंकि यह केवल फाइलों को कॉपी करने के बाद पहली बार होता है।
फ़्रैंकेंड्स

मुझे शुरुआती सुस्ती से बचने के एक तरीके के बारे में पता नहीं है, लेकिन अगर कुछ कमांड था जो यह कर सकता था, तो यह शुरुआती git statusकमांड के समान ही काम कर रहा होगा, इसलिए संभवत: इसे पूरा करने में उतना ही समय लगेगा।
DanJAB

4

मेरी git statusगति बहुत धीमी थी (एक मिनट तक), क्योंकि वैश्विक .gitignoreफ़ाइल मेरी विंडोज़ उपयोगकर्ताप्रतिष्ठित में स्थित थी, जिसे एक दुर्गम नेटवर्क शेयर पर संग्रहीत किया गया था।

git config --global core.excludesfile
कुछ ऐसा दिखाया \\Nxxxx0\User\Username\Eigene Dateien\gitignore_global.txt

किसी कारण \\Nxxxx0से दुर्गम था और एक बैकअप सिस्टम से मेरी उपयोगकर्ताप्रति लोड की गई थी \\Nxxxxx1। यह पता लगाने में कुछ समय लगा, क्योंकि आम तौर पर मेरा उपयोगकर्ता लाभ उद्यम स्टार्टअप स्क्रिप्ट द्वारा ड्राइव अक्षर से जुड़ा होता है और उस ड्राइव अक्षर को एक्सेस करना हमेशा की तरह काम कर रहा था। मुझे यकीन नहीं है कि git-config ने नेटवर्क शेयर का उपयोग क्यों किया है और ड्राइव अक्षर का नहीं (शायद मुझे दोष देने के लिए छोटा है)

सेट करने के बाद
git config --global core.excludesfile $HOME/Eigene\ Dateien/gitignore_global.txt
git statusवापस सामान्य गति में आ गया।


3

रनिंग git fsckने अतीत में मेरे लिए इस मुद्दे को हल किया है।


3

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


1

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

मैंने बस बहुत सारे रिपॉजिट डिलीट कर दिए, जिनकी मुझे अब स्थानीय रूप से आवश्यकता नहीं थी, और मेरी गिट स्थिति 1 मिनट ~ से 5 सेकंड तक चली गई।

मैं यहाँ इसके समान कोई उत्तर नहीं देख सकता।


1
मुझे नहीं लगता कि यह git statusकिसी भी तरह से एक निर्देशिका में चलने वाले मानक को प्रभावित कर सकता है । यदि आपकी रिपॉजिटरी की अलग-अलग निर्देशिकाओं में जाँच की जाती है, तो आप केवल git statusएक समय में उनमें से किसी एक के लिए ही चल सकते हैं । यह एक अलग कहानी हो सकती है अगर आपके गिट रिपॉज ओवरलैपिंग हैं, लेकिन यह एक बुरा विचार है।
ह्यूबर्ट ग्रेज्सकोविआक

@HubertGrzeskowiak यह निश्चित रूप से कर सकते हैं। मेरे लिए मेरी हार्ड ड्राइव पर वे सभी अलग-अलग जगहों पर थे, लेकिन जीआईटी स्टेटस टाइप करने पर मेरे लोड समय को बहुत प्रभावित किया। डुप्लिकेट रिपॉजिटरी को हटाने के बाद यह तुरंत कई मिनट से 5 सेकंड तक तेज हो गया।
जैक पेरी

1

एक और पहलू में git statusसुधार किया जाएगा (Git 2.14.x / 2.15, Q4 2017 में) यह तब है जब यह अच्छी तरह से अनदेखा फ़ाइलों को दिखाता है ( git status --ignored)

" git status --ignored", जब यह देखते हुए कि किसी ट्रैक किए गए पथ के बिना किसी निर्देशिका को अनदेखा किया गया है, तब भी निर्देशिका में सभी उपेक्षित पथों की गणना की जाती है, जो अनावश्यक है।
इस ओवरहेड से बचने के लिए कोडपथ को अनुकूलित किया गया है।

जेम्सन मिलर ( ) द्वारा देखें 5aaa7fd (18 सितंबर 2017 )(द्वारा विलय Junio सी Hamano - - में प्रतिबद्ध 075bc9c , 29 सितं, 2017)jamill
gitster

के प्रदर्शन में सुधार git status --ignored

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

400 नजरअंदाज निर्देशिकाओं में 196,000 फाइलों के साथ एक उदाहरण भंडार पर प्रदर्शन अंतर के उदाहरण के लिए:

| Command                    |  Time (s) |
| -------------------------- | --------- |
| git status                 |   1.2     |
| git status --ignored (old) |   3.9     |
| git status --ignored (new) |   1.4     |

अधिक इंप्रूवमेंट के लिए (Git 2.17, Q2 2018 में सेट), इस उत्तर को देखें ।


पूरी तरह से यादृच्छिक उदाहरण यहाँ: node_modulesइस पूर्ण परिवर्तन से प्रभावित हो सकता है। ऐसा हो सकता है।
सेठ बैटन

1

Git के पुराने संस्करणों में git स्टेटस के साथ एक प्रदर्शन समस्या है - अधिक जानकारी के लिए git स्टेटस प्रदर्शन को बेहतर बनाने के तरीके देखें ।

git 2.13 में 1 फिक्स, और 2.17 अधिक है। मैं २. 2.7 से २.२३ पर चला गया और इसने धीमी स्थिति को हल कर दिया। जल्द ही 2.24 के लिए एक और सुधार की योजना है।


0

मेरे मामले git statusमें, प्रोजेक्ट में फ़ाइलों के स्वामी से एक अलग उपयोगकर्ता के रूप में चलने के कारण सुस्ती थी ।

सभी उदाहरणों में लागू नहीं होने पर, chownआपके वर्तमान उपयोगकर्ता के लिए एक सरल चाल हो सकती है।


-13

अपने चेकआउट के एक नए क्लोन के साथ शुरू करने की कोशिश करें।

git clone myrepo mynewrepo

और फिर mynewrepo में स्थिति दर्ज करें।

वैकल्पिक रूप से, और यदि आप साहसी हैं, तो अपने मौजूदा चेकआउट से बकवास को साफ करें।

git clean -dfx

यह git को अनदेखा या जाँच नहीं की गई फ़ाइलों में से कुछ (संभवतः बड़े) स्कैन करने से बचाती है।


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

5
मुझे इस जवाब से असहमत होना होगा, जीआईटी क्लीन-पीडीएफ चलाने से चीजें टूट सकती हैं।
मार्सेल वाल्डेज़ ओरोज्को
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.