github




উইন্ডোজ 7 এক্স 64 এ গিট বাশ অত্যন্ত ধীর (16)

অনেকেই বলেছিলেন, এটি উইন্ডোজগুলিতে শেল স্ক্রিপ্ট হিসাবে stash হওয়ার কারণে, কিন্তু জিটি 2.18.0 থেকে উইন্ডোজ ইনস্টলারটির স্ট্যাশের অনেক দ্রুত (~ 90%) বিল্ট-ইন সংস্করণের পরীক্ষামূলক বৈশিষ্ট্যটির বিকল্প রয়েছে - https://github.com/git-for-windows/build-extra/pull/203

আমি উইন্ডোজ এবং উবুন্টু উভয়ই একটি ছোট প্রকল্পের বিকাশের সময় গিট ব্যবহার করছি, প্রায়শই দুইজনের মধ্যে ঘুরে বেড়ায়। ইস্যুটি হ'ল গিট বাশ ক্রমাগত ধীর হয়ে যায়।

যখন আমি ধীরে ধীরে বলি, আমি বুঝি যে চলমান cd 8-25 সেকেন্ডের মধ্যে যে কোনও জায়গা নেয়, git কমান্ডগুলি 5-20 সেকেন্ড থেকে লাগে এবং ls মাঝে মাঝে 30 সেকেন্ড পর্যন্ত সময় নিতে পারে। বলার প্রয়োজন নেই, এটি মজাদার নয়, অজৈব উল্লেখ না। আমি জানি জিট উইন্ডোজের উপর ধীর, কিন্তু এটি হাস্যকর।

এক সমাধান যা কাজ করেছে - অস্থায়ীভাবে - আমার জন্য আমার নেটওয়ার্ক সংযোগ নিষ্ক্রিয় করা হয়েছে (যেমন এই উত্তরটি দেওয়া হয়েছে), গিট বাশ শুরু করুন এবং তারপরে পুনরায় সংযোগ করুন। কখনও কখনও এটি করার পরে কয়েক দিনের জন্য এটি দ্রুত চলতে থাকে, তবে কার্যত সর্বদা অবশেষে হ্রাস পায়। আমি msysgit আলোচনা গোষ্ঠী, স্ট্যাক ওভারফ্লো, msysgit ইস্যু তালিকা, ইত্যাদির জন্য বন্ধ এবং বন্ধ করে দিয়েছি, তবে আমি সমাধানগুলি কার্যকর করতে সক্ষম নই।

এ পর্যন্ত, আমি চেষ্টা করেছি:

  • ভাইরাস স্ক্যানারের বর্জন তালিকায় জিট এবং প্রকল্প ফোল্ডার যোগ করা হচ্ছে
  • সম্পূর্ণরূপে আমার ভাইরাস স্ক্যানার নিষ্ক্রিয় (Kaspersky আইএস 2011)
  • Outlook চালু হচ্ছে না তা নিশ্চিত করা (Outlook 2007)
  • সব অন্যান্য অ্যাপ্লিকেশন বন্ধ
  • প্রশাসক হিসাবে গিট বাশ চলমান
  • নেটওয়ার্ক সংযোগ নিষ্ক্রিয় করা, জিট ব্যাশ শুরু করা, এবং সংযোগটি নিষ্ক্রিয় রাখা
  • গিট ব্যাশ শুরু করা, নেটওয়ার্ক সংযোগ নিষ্ক্রিয় করা, সংযোগ পুনরায় সক্ষম করা (শুধুমাত্র মাঝে মাঝে কাজ করে)
  • চলমান git gc
  • এবং উপরের সমন্বয়

আমি পড়তে পারলাম যে কয়েক জন মানুষ সাফল্যের সাথে ব্যাশের সমাপ্তি নিষ্ক্রিয় করেছে, কিন্তু আদর্শভাবে আমি সেটি সক্রিয় রাখতে চাই। Msysgit এর সংস্করণ 1.7.3.1-পূর্বরূপ ২0101002 এবং ওএস হল উইন্ডোজ 7 x64। লিনাক্সে একই জিনিস চালানো, পূর্বাভাসে, দ্রুত বাজানো। আমি এক্সক্লুসিভভাবে লিনাক্স ব্যবহার করব, তবে উইন্ডোজগুলিতেও স্টাফ চালানোর দরকার হয় (নির্দিষ্ট অ্যাপ্লিকেশন, টেস্টিং ইত্যাদি)।

যে কেউ একটি অনুরূপ সমস্যা সম্মুখীন হয়েছে? যদি তাই হয়, অন্তর্নিহিত সমস্যা কি ছিল এবং সমাধানটি কী ছিল (যদি থাকে)?

এটি কেবলমাত্র গিট রিপোজিটরির বাইরে প্রসারিত, তবে শুধুমাত্র রেফারোরিজির জন্য, আমি যে Git ব্যবহার করেছি সেগুলি বেশ ছোট হয়েছে: ~ 4-50 টি ফাইল সর্বাধিক।


আপনার বাথ প্রম্পটে দেখাচ্ছে Git তথ্য আছে? যদি তাই হয়, আপনি অজানাভাবে প্রতি কমান্ডের উপর অনেক কাজ করছেন করছেন। এই তত্ত্বটি পরীক্ষা করার জন্য ব্যাশে নিম্নলিখিত অস্থায়ী পরিবর্তনগুলি চেষ্টা করুন:

export PS1='$'

আপনি কিছু কনফিগারেশন অপশন সেট করতে তিনটি কমান্ড চালানোর মাধ্যমে উইন্ডোজটিতে গিটটি উল্লেখযোগ্যভাবে গতিসম্পন্ন করতে পারেন:

git config --global core.preloadindex true
git config --global core.fscache true
git config --global gc.auto 256

নোট:

  • core.preloadindex ফাইল সিস্টেমের অপারেটিংগুলিকে গোপন লুকানোর জন্য সমান্তরাল করে core.preloadindex (আপডেট: গিট 2.1 এ ডিফল্টরূপে সক্ষম)

  • core.fscache ইউএসি সমস্যাগুলি সমাধান করে যাতে আপনাকে প্রশাসক হিসাবে Git চালানোর দরকার হয় না (আপডেট: উইন্ডোজ 2.8 এর জন্য core.fscache ডিফল্টরূপে সক্ষম করা হয়েছে)

  • gc.auto ফাইলের সংখ্যা কমিয়ে দেয় .git /


আপনি যদি cmd থেকে গিট ব্যবহার করেন তবে এটি গিট ব্যাশ থেকে চালানোর চেষ্টা করুন। Cmd এ, git.exe আসলে একটি রেপার যা সেটিকে প্রতিবার চালু করার সময় সঠিক পরিবেশ সেট করে, এবং শুধুমাত্র তখনই বাস্তব git.exe চালু করে। আপনি যতটা চান তা করতে এটি যতটা প্রয়োজন তার চেয়ে দ্বিগুণ সময় লাগতে পারে। এবং গিট বাশ কেবল তখন শুরু হয় যখন এটি শুরু হয়।


আমার একজন সহকর্মী উইন্ডোজ (7) git status checkout git commit নিয়ে সমস্যা নিয়েছিলেন এবং দ্রুত add ছিলেন, কিন্তু git commit বয়সের সময় নেয়।

আমরা এখনও এটির মূল কারণ খুঁজে বের করার চেষ্টা করছি, কিন্তু নতুন ফোল্ডারে সংগ্রহস্থলটি ক্লোন করা তার সমস্যাটি স্থির করেছে।


আমার ক্ষেত্রে, এটি আসলে অ্যাভাস্ট অ্যান্টিভাইরাস ছিল যা গিট ব্যাশের দিকে এবং এমনকি পাওয়ারশেলটি ধীর হয়ে উঠছে।

আমি প্রথমে 10 মিনিটের জন্য এভাস্টকে অক্ষম করার চেষ্টা করে দেখি এটি গতি বাড়িয়েছে কিনা এবং এটি করেছে। পরে, আমি সম্পূর্ণ Git Bash ইনস্টলেশন ডিরেক্টরিটি অ্যাভাস্টে ব্যতিক্রম হিসাবে পড়ুন, পড়ুন, লিখুন এবং চালান। আমার ক্ষেত্রে যে ছিল C:\Program Files\Git\*



আমি cmd.exe দিয়ে "প্রশাসক হিসাবে চালান" দিয়ে উইন্ডোজ 7 x64 এ আমার ধীরগতির সমস্যা সমাধান করেছি।


আমি নেটওয়ার্ক ড্রাইভ কর্মক্ষমতা সমস্যা পাওয়া যায় নি। HOME একটি ধীর নেটওয়ার্কের শেয়ার নির্দেশ ছিল। আমি HOMEDRIVE ওভাররাইড করতে HOMEDRIVE কিন্তু আমি যা দেখেছি তা থেকে কোনও সমস্যা নেই।

ডেস্কটপে ডান কম্পিউটারে ক্লিক করে পরিবেশ পরিবর্তনশীল সেট করুন -> বৈশিষ্ট্য -> উন্নত সিস্টেম সেটিংস -> পরিবেশের পরিবর্তনগুলি ব্যবহারকারী ভেরিয়েবল বিভাগে যোগ করুন

HOME=%USERPROFILE%

আমি পিট পিএস 1 ধীর git gc ছিলাম, যদিও দীর্ঘদিন ধরে আমি এটি ডেটাবেস আকারের সমস্যার (বড় সংগ্রহস্থলের) চিন্তাভাবনা করেছিলাম এবং বিভিন্ন git gc কৌশলগুলি চেষ্টা করছিলাম এবং আপনার মত অন্যান্য কারণগুলি সন্ধান git gc । যাইহোক, আমার ক্ষেত্রে, সমস্যা এই লাইন ছিল:

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
}

প্রতিটি কমান্ড লাইন স্ট্যাটাস লাইনের জন্য git status মন্থর ছিল। সেকি। এটা আমি হাতে লিখে কিছু ছিল। আমি দেখেছি যে যখন এটি একটি সমস্যা ছিল

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
    ...

গিট বর্তমান শাখা এবং রং সঙ্গে স্ট্যাক ওভারফ্লো পোস্ট PS1 লাইন থেকে এবং এটি জরিমানা কাজ করে। আবার একটি দ্রুত গিট কমান্ড লাইন আছে।


উপরের কোন কিছুই আমাকে সাহায্য করতে সক্ষম ছিল না। আমার দৃশ্যকল্প ইন ইস্যু নিজেকে এই মত দেখাচ্ছে:

  • যে কোন কমান্ড ধীর ছিল (চালানোর জন্য প্রায় 3 সেকেন্ড সময় লাগছিল)
  • পরবর্তী কোনও কমান্ড অবিলম্বে কার্যকর হয় তবে পূর্ববর্তী ls কমান্ড থেকে 45 সেকেন্ডের মধ্যেই কেবলমাত্র

যখন এটি প্রক্রিয়া মনিটরের সাথে ডিবাগিংয়ে আসে তখন এটি পাওয়া যায় যে প্রতিটি কমান্ডের আগে একটি DNS অনুরোধ ছিল।

তাই যত তাড়াতাড়ি আমি আমার ফায়ারওয়াল (আমার ক্ষেত্রে Comodo) নিষ্ক্রিয় করা এবং কমান্ড চালানো যাক সমস্যা চলে গেছে। এবং ফায়ারওয়ালটি আবার চালু হলে এটি ফিরে আসছে না। প্রথমতম সুযোগের সাথে আমি এই প্রতিক্রিয়াটি কীভাবে একটি ব্লকিং DNS অনুরোধ করছিল এবং লক্ষ্য কী ছিল তা সম্পর্কে আরও বিশদ সহ আপডেট করব।

বিআর, জি


এই অন্যান্য উত্তরগুলির পাশাপাশি, আমি সমান্তরাল সাবমিডেল ফিচারিং ব্যবহার করে একাধিক সাবমোডুলগুলির সাথে প্রকল্পগুলি বিস্তৃত করেছি (২016 সালের শুরুতে গিট 2.8 থেকে)।

এটি git fetch --recurse-submodules -j8 এবং git config --global submodule.fetchJobs 8 সাথে সেট করা যেতে পারে git fetch --recurse-submodules -j8 git config --global submodule.fetchJobs 8 , অথবা যাইহোক আপনি অনেকগুলি কোরে ব্যবহার করতে চান।


ক্রিস ডলানের উত্তরের একটি এক্সটেনশনে, আমি নিম্নলিখিত বিকল্পটি ব্যবহার করে PS1 সেটিংটি ব্যবহার করেছি। শুধু আপনার ~ /। প্রোফাইলে কোড টুকরা যোগ করুন (উইন্ডোজ 7: সি: / ইউজার / ইউএসইআরএন / প্রোফাইল)।

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 আপনাকে ধীর করে দেয়

সম্পূর্ণরূপে নিষ্ক্রিয় করার পরিবর্তে (ডলানের প্রস্তাবিত) অথবা উইলবার্ট দ্বারা দেওয়া স্ক্রিপ্ট ব্যবহার করে, আমি একটি "বোকা PS1" ব্যবহার করি যা খুব দ্রুত।

এটি ব্যবহার করে (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\]# '

আমার সিগুইন-এ, উইলবার্টের "দ্রুত_গিট_পিএস 1" উত্তর - ২00 মিঃ বনাম 400 মিঃ এর চেয়ে দ্রুত, তাই এটি আপনার প্রম্পট অলসতার কিছুটা বন্ধ করে দেয়।

এটি __git_ps1 হিসাবে অত্যাধুনিক নয় - উদাহরণস্বরূপ এটি .git ডিরেক্টরি ইত্যাদিতে cd হলে প্রম্পট পরিবর্তন করে না। তবে স্বাভাবিক দৈনন্দিন ব্যবহারের জন্য এটি যথেষ্ট ভাল এবং দ্রুত।

এই গিট 1.7.9 (সিগুইন, কিন্তু এটি কোনো প্ল্যাটফর্ম কাজ করা উচিত) পরীক্ষা করা হয়েছিল।


যৌথ উত্তর:

  1. Wilbert's - PS1 মধ্যে কি তথ্য অন্তর্ভুক্ত করা
  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}\] $ '

ফলাফল:


শুধুমাত্র ডিভাইস ম্যানেজারের এএমডি রাডন গ্রাফিক্স (বা Intel গ্রাফিক্স) বন্ধ করতে আমাকে সাহায্য করেছে।

আমি এখানে উত্তর খুঁজে পেয়েছি: https://superuser.com/questions/1160349/git-is-extremely-slow-on-windows#=





mingw32