git - विंडोज 7 x64 में गिट/बैश बेहद धीमा है




bash windows-7 (14)

उपरोक्त में से कुछ भी मेरी मदद करने में सक्षम था। मेरे परिदृश्य में यह मुद्दा स्वयं इस तरह दिख रहा था:

  • कोई भी ll कमांड धीमा था (निष्पादित करने में लगभग 3 सेकंड लग रहा था)
  • किसी भी बाद के ll कमांड को तुरंत निष्पादित किया गया था, लेकिन केवल पिछले ls कमांड से 45 सेकंड के भीतर

जब यह प्रक्रिया मॉनिटर के साथ डीबगिंग करने आया तो यह पाया गया कि प्रत्येक कमांड से पहले एक DNS अनुरोध था।

तो जैसे ही मैंने अपना फ़ायरवॉल अक्षम कर दिया (मेरे मामले में कमोडो) और आदेश को निष्पादित करने का आदेश चला गया है। और जब वापस फ़ायरवॉल वापस स्विच किया गया था यह वापस नहीं आ रहा है। सबसे शुरुआती मौके के साथ मैं इस प्रतिक्रिया को अधिक जानकारी के साथ अपडेट करूंगा कि किस प्रक्रिया को अवरुद्ध DNS अनुरोध कर रहा था और लक्ष्य क्या था।

बी आर, जी

मैं एक छोटी परियोजना के विकास के दौरान विंडोज और उबंटू दोनों पर गिट का उपयोग कर रहा हूं, जो अक्सर दोनों के बीच आगे बढ़ रहा है। मेरे पास जो मुद्दा है वह यह है कि गिट / बैश लगातार धीमा हो जाता है। जब मैं धीमा कहता हूं, मेरा मतलब है कि cd चलाना 8-25 सेकेंड से कहीं भी लेता है, git कमांड को 5-20 सेकंड से लेते हैं, और कभी-कभी 30 सेकंड तक लग सकते हैं। कहने की जरूरत नहीं है, यह मज़ेदार नहीं है, अनुत्पादक का उल्लेख नहीं है। मुझे पता है कि विंडोज पर गिट धीमा है, लेकिन यह हास्यास्पद है।

एक समाधान जिसने काम किया है - अस्थायी रूप से - मेरे लिए मेरे नेटवर्क कनेक्शन को अक्षम करना है (जैसा कि इस उत्तर में सुझाया गया है), गिट शुरू करें, और उसके बाद पुनः कनेक्ट करें। कभी-कभी ऐसा करने के कुछ दिनों बाद यह तेजी से चल रहा है, लेकिन प्रदर्शन हमेशा अंततः घटता है। मैंने msysgit चर्चा समूह, SO, msysgit issue list, आदि के माध्यम से हफ्तों तक चालू और बंद कर दिया है, लेकिन मैं उन समाधानों को चालू करने में सक्षम नहीं हूं जो काम करते हैं।

अब तक, मैंने कोशिश की है:

  • वायरस स्कैनर की बहिष्करण सूची में गिट और प्रोजेक्ट फ़ोल्डर्स जोड़ना
  • मेरे वायरस स्कैनर को पूरी तरह से अक्षम करना (कैस्पर्सकी आईएस 2011)
  • यह सुनिश्चित करना कि Outlook चालू नहीं है (Outlook 2007)
  • अन्य सभी अनुप्रयोगों को बंद करना
  • व्यवस्थापक के रूप में गिट चल रहा है
  • नेटवर्क कनेक्शन को अक्षम करना, गिट शुरू करना, और कनेक्शन को अक्षम रखना
  • नेटवर्क कनेक्शन को अक्षम करना, गिट शुरू करना, कनेक्शन को फिर से सक्षम करना (कभी-कभी काम करता है)
  • गिट जीसी चल रहा है
  • और उपरोक्त के संयोजन

मैंने पढ़ा था कि कुछ लोगों ने सफलतापूर्वक बैश पूरा करने में अक्षमता हासिल की थी, लेकिन आदर्श रूप में मैं इसे सक्रिय रखना चाहता हूं। Msysgit का संस्करण 1.7.3.1-preview20101002 है और ओएस विंडोज 7 x64 है। लिनक्स पर वही चीजें चलाना, अनुमानतः, बिजली तेज है। मैं विशेष रूप से लिनक्स का उपयोग करता हूं, लेकिन मुझे विंडोज़ में भी सामान चलाने की ज़रूरत है, कुछ (कुछ ऐप्स, परीक्षण इत्यादि)।

क्या किसी को भी इसी तरह का मुद्दा सामने आया है? यदि हां, अंतर्निहित समस्या क्या थी और समाधान क्या था (यदि कोई है)?

संपादित करें: यह केवल गिट रिपोजिटरी से परे फैला हुआ है, लेकिन केवल संदर्भ के लिए, जिन रिपोप्स के साथ मैं गिट का उपयोग कर रहा हूं, वे काफी छोटे हैं: ~ 4-50 फाइलें अधिकतम।


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

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


क्या आपके पास आपके बैश प्रॉम्प्ट में गिट जानकारी दिख रही है? यदि ऐसा है, तो हो सकता है कि आप अनजाने में हर आदेश पर बहुत अधिक काम कर रहे हों। इस सिद्धांत का परीक्षण करने के लिए बैश में निम्नलिखित अस्थायी परिवर्तन आज़माएं:

export PS1='$'

क्रिस डॉलन के जवाब के विस्तार में, मैंने निम्नलिखित वैकल्पिक पीएस 1 सेटिंग का उपयोग किया। बस कोड ~ ~ .profile में कोड खंड जोड़ें (Win7: c: /Users/USERNAME/.profile पर)।

fast_git_ps1 ()                                                                              
{                                                                                            
    printf -- "$(git branch 2>/dev/null | sed -ne '/^\* / s/^\* \(.*\)/ [\1] / p')"
}                                                                                            

PS1='\[\033]0;$MSYSTEM:\w\007                                                                
\033[32m\]\[email protected]\h \[\033[33m\w$(fast_git_ps1)\033[0m\]                                         
$ '                                                                                          

यह एक रंगीन खोल के लाभ और वर्तमान शाखा नाम (यदि एक गिट रेपो में) का प्रदर्शन करता है, लेकिन ~ 0.75 से 0.1 के बीच, मेरी मशीन पर काफी तेज है।

इस ब्लॉग के आधार पर।


जैसा कि क्रिस डॉलन और विल्बर्ट के उत्तरों में उल्लेख किया गया है, पीएस 1 आपको धीमा कर देता है

विल्बर्ट द्वारा दी गई स्क्रिप्ट का उपयोग करने या पूरी तरह से अक्षम करने के बजाय (डोलन द्वारा सुझाए गए अनुसार), मैं एक "गूंगा पीएस 1" का उपयोग करता हूं जो बहुत तेज है।

यह उपयोग करता है (git symbolic-ref -q HEAD || git rev-parse --short HEAD) 2> /dev/null :

PS1='\033[33m\]\w \n\[\033[32m\]$((git symbolic-ref -q HEAD || git rev-parse -q --short HEAD) 2> /dev/null) \[\033[00m\]# '

मेरे सिगविन पर, यह विल्बर्ट के "fast_git_ps1" उत्तर - 200ms बनाम 400 मिमी से तेज है, इसलिए यह आपके शीघ्र आलसीपन को दूर करता है।

यह __git_ps1 रूप में परिष्कृत नहीं है - उदाहरण के लिए जब आप .git निर्देशिका आदि में cd करते हैं तो यह प्रॉम्प्ट नहीं बदलता है, लेकिन सामान्य __git_ps1 उपयोग के लिए यह पर्याप्त और तेज़ है।

गिट 1.7.9 (साइगविन पर परीक्षण किया गया है, लेकिन किसी भी मंच पर काम करना चाहिए)


निम्नलिखित गिट कॉन्फ़िगरेशन को बदलकर आपको बहुत ही कम प्रदर्शन प्रदर्शन भी मिल सकता है:

git config --global status.submoduleSummary false

विंडो 7 x64 पर सरल git status कमांड चलाते समय, यह मेरे कंप्यूटर को चलाने के लिए 30 सेकंड से अधिक समय ले गया। इस विकल्प को परिभाषित करने के बाद, आदेश तत्काल है।

निम्नलिखित पृष्ठ में बताए गए गिट के अपने ट्रेसिंग को सक्रिय करने से मुझे समस्या की उत्पत्ति मिली, जो आपकी स्थापना में भिन्न हो सकती है: github.com/msysgit/msysgit/wiki/Diagnosing-why-Git-is-so-slow


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

function ps1_gitify
{
   status=$(git status 2>/dev/null )      # <--------------------
   if [[ $status =~ "fatal: Not a git repository" ]]
   then
       echo ""
   else
       echo "$(ps1_git_branch_name)  $(ps1_git_get_sha)"
  fi
}

तो हर कमांड लाइन स्थिति लाइन के लिए गिट स्थिति क्या धीमी थी। आउच। यह कुछ हाथ मैंने लिखा था। मैंने देखा कि जब मैंने कोशिश की तो समस्या थी

export PS1='$'

जैसा कि यहां एक उत्तर में उल्लेख किया गया है। कमांड लाइन बिजली तेज थी।

अब मैं इसका उपयोग कर रहा हूं:

function we_are_in_git_work_tree 
{
    git rev-parse --is-inside-work-tree &> /dev/null
}

function ps1_gitify
{
    if ! we_are_in_git_work_tree
    then
    ...

इस SO https://.com/a/11975827/2492808 और यह ठीक काम करता है। फिर तेज गिट कमांड लाइन है।


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

और हां, मुझे एहसास है कि मूल पोस्ट में एंटी-वायरस मुद्दा नहीं था, लेकिन अगर मैं किसी के लिए उपयोगी होता तो मैं इसे यहां रखूंगा।


मेरे मामले में, गिट बैश शॉर्टकट को Start in:%HOMEDRIVE%%HOMEPATH% करने के लिए सेट किया गया था Start in:%HOMEDRIVE%%HOMEPATH% (आप इसे गिट बैश पर राइट क्लिक करके और गुणों का चयन करके देख सकते हैं)। यह नेटवर्क ड्राइव था।

समाधान यह %HOME% को इंगित करना है। यदि आपके पास यह नहीं है, तो आप इसे पर्यावरण चर में सेट कर सकते हैं और अब गिट बैश बिजली तेज होनी चाहिए।


मेरे मामले में, यह वास्तव में अवास्ट एंटीवायरस था जो गिट बैश की ओर अग्रसर था और यहां तक ​​कि पावरहेल भी वास्तव में धीमा हो रहा था।

मैंने पहली बार यह देखने के लिए 10 मिनट के लिए अवास्ट को अक्षम करने की कोशिश की कि क्या यह गति में सुधार हुआ है और ऐसा हुआ है। इसके बाद, मैंने अवास्ट में एक अपवाद के रूप में संपूर्ण गिट बैश स्थापना निर्देशिका को जोड़ा, पढ़ने, लिखने और निष्पादित करने के लिए जोड़ा। मेरे मामले में C:\Program Files\Git\*


मैंने "7 व्यवस्थापक के रूप में चलाएं" के साथ cmd.exe शुरू करके Win 7 x64 पर अपनी धीमी गिट समस्या हल की।


मैंने पाया कि नेटवर्क ड्राइव प्रदर्शन समस्या थी। HOME धीमी नेटवर्क शेयर की ओर इशारा कर रहा था। मैं HOMEDRIVE ओवरराइड नहीं कर सका लेकिन यह मैंने जो देखा है उससे कोई समस्या नहीं है।

डेस्कटॉप पर अपने कंप्यूटर पर राइट क्लिक करके पर्यावरण परिवर्तक सेट करें -> गुण -> उन्नत सिस्टम सेटिंग्स -> पर्यावरण परिवर्तक उपयोगकर्ता चर अनुभाग में जोड़ें

HOME=%USERPROFILE%

संयुक्त उत्तर:

  1. Wilbert's - पीएस 1 में क्या जानकारी शामिल है
  2. sinelaw's - (<branch_name>) या (<sha>)
# https://unix.stackexchange.com/questions/140610/using-variables-to-store-terminal-color-codes-for-ps1/140618#140618
# https://unix.stackexchange.com/questions/124407/what-color-codes-can-i-use-in-my-ps1-prompt
# \033 is the same as \e
# 0;32 is the same as 32
CYAN="$(echo -e "\e[1;36m")"
GREEN="$(echo -e "\e[32m")"
YELLOW="$(echo -e "\e[33m")"
RESET="$(echo -e "\e[0m")"

# https://.com/questions/4485059/git-bash-is-extremely-slow-in-windows-7-x64/19500237#19500237
# https://.com/questions/4485059/git-bash-is-extremely-slow-in-windows-7-x64/13476961#13476961
# https://.com/questions/39518124/check-if-directory-is-git-repository-without-having-to-cd-into-it/39518382#39518382
fast_git_ps1 ()
{
    git -C . rev-parse 2>/dev/null && echo " ($((git symbolic-ref --short -q HEAD || git rev-parse -q --short HEAD) 2> /dev/null))"
}

# you need \] at the end for colors
# Don't set \[ at the beginning or ctrl+up for history will work strangely
PS1='${GREEN}\[email protected]\h ${YELLOW}\w${CYAN}$(fast_git_ps1)${RESET}\] $ '

परिणाम:






mingw32