ওহ - আমার- zsh ধীর, তবে শুধুমাত্র কিছু গিট রেপোর জন্য


102

আমি সম্প্রতি Zsh ব্যবহার শুরু করেছি এবং এটি দুর্দান্ত। দুর্ভাগ্যক্রমে, প্রকল্পটির জন্য আমি আমার "মূল" প্রকল্পটি বিবেচনা করি, সবকিছু ধীরে ধীরে। আমার অর্থ হ'ল প্রতিবার আমি একটি কমান্ড চালাচ্ছি - lsউদাহরণস্বরূপ - কমান্ড কার্যকর হওয়ার সময় এবং আমি আবার টার্মিনালটি ব্যবহার করতে পারার মধ্যে প্রায় পাঁচ সেকেন্ডের বিলম্ব রয়েছে।

এই এক রেপোর চেয়ে আলাদা কী হতে পারে যা Zsh এত ধীর করে দেয়? আমি ধরে নিলাম এটি একটি Zsh- নির্দিষ্ট জিনিস কারণ আমি Zsh ব্যবহার শুরু করার আগে কোনও সমস্যা হয়নি। আমি একটি চেষ্টা করেছিলাম git cleanকিন্তু এটি কোনও লক্ষণীয় পার্থক্য তৈরি করতে পারেনি।

আমি যদি ম্যাক ওএস এক্সে আছি তবে তা গুরুত্বপূর্ণ।

আপডেট: আমার এই লাইনটি .zshenvএটি আস্তে আস্তে তৈরি করছে:

[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" # Load RVM function

যদি আমি সেই লাইনটি মন্তব্য করি তবে এটি প্রায় 3 সেকেন্ড সময় থেকে শুরু করে প্রায় 1 সেকেন্ড সময় নেয়। দুর্ভাগ্যক্রমে, আমার সেই লাইনটি দরকার, যেহেতু আমার অনেক প্রকল্পের আরভিএম ব্যবহার করে। আমি এখন কি করব জানি না।

আপডেট 2 : এটি বিশেষত একটি ওহ-আমার- zsh জিনিস বলে মনে হচ্ছে। আমি যদি লোড না করি তবে আমার ~/.oh-my-zsh/oh-my-zsh.shকোনও সমস্যা নেই।


4
এবং আপনি যদি এখন ব্যাশ ব্যবহার করেন তবে এটি এখনও ধীর?
নিনেও

দুর্দান্ত প্রশ্ন। না, এটি দ্রুত চলছে।
জেসন সোয়েট

আপনি যদি নিজের ~/.z*ফাইলগুলি সরিয়ে না ফেলে থাকেন তবে এটি এখনও ধীর ?
ব্যবহারকারীর 4815162342

না। সুতরাং আমি অনুমান করি যে এটিগুলির মধ্যে একটির মধ্যে এটি কিছু।
জেসন সোয়েট

4
রেপো যদি বড় হয়, প্রতিবার গিট স্ট্যান্ড কল করা শেলটি কমিয়ে দিতে পারে। এটি বন্ধ করতে এই বিকল্পটি ব্যবহার করুন। গিট কনফিগারেশন - ওহ-মাই-জেডএসএইচডি-স্থিতি 1
কুমার

উত্তর:


171

আপনি এটিকে আপনার গিট কনফিগারেশনে যুক্ত করতে পারেন এবং zsh স্থিতিটি আর পরীক্ষা করবেন না

git config --add oh-my-zsh.hide-status 1
git config --add oh-my-zsh.hide-dirty 1

ব্যাখ্যা

Lib / git.zsh এ দুটি কেন্দ্রীয় গিট ফাংশন রয়েছে :

  • git_prompt_info()
  • parse_git_dirty()

এটি নিষ্ক্রিয় করতে প্রতিটি পদ্ধতির একটি গিট কনফিগার সুইচ রয়েছে:

  • oh-my-zsh.hide-status
  • oh-my-zsh.hide-dirty

কিছু থিম তাদের নিজস্ব গিট প্রশ্ন তৈরি করে এবং কখনও কখনও এই পতাকাগুলি উপেক্ষা করে


4
এই সমাধানটি এখনও কাজ করে, কেবল আমার সিমফনি 2 প্রকল্প ফোল্ডারে এটি ব্যবহার করে। হয়তো বিক্রেতার ফোল্ডারটি জিনিসগুলি ধীর করে দেয়, যেমন র‌্যাক ফোল্ডারটি রেল অ্যাপসের জন্য করে? zsh এখন দ্রুত, এবং যাইহোক আমার GIT zsh প্লাগইন দরকার নেই। ধন্যবাদ!
mblaettermann

এটি আমার সমস্যাটিকে পুরোপুরি সমাধান করেছে solved আমি এখনও অন্য রেপগুলিতে দুর্দান্ত গিট-স্ট্যাটাস ব্যবসায়টি ব্যবহার করতে পারি, তবে আমার বিশাল ফায়ারফক্স সোর্স কোড রেপোতে নেই যেখানে গিটটি ধীর হয়ে যায়।
লিও উফিমটসেভ

4
আমাকে ব্যবহার করতে হয়েছিল oh-my-zsh.hide-dirty। এটি পরিবর্তিত হতে পারে বা আমার থিম (অগ্নি) কেবল সম্মান করে hide-dirty
বেনিয়ামিন আতকিন

4
ভবঘুরে Virtualbox VMs গ্লোবাল সেটিংসে এই করছেন সঙ্গে --globalসত্যিই সুবিধাজনক (অতিথি মন্থর, দ্রুত হোস্ট) হিসাবে এখানে বর্ণিত: stackoverflow.com/a/40943155/1092815 <3
GabLeRoux

6
git config --add oh-my-zsh.hide-dirty 1আমার ধীর রেপোর জন্য আমার যা দরকার ছিল তা ছিল।
জনাথন এলমোর

26

ওহ_মি_জ্যাশ কিছু রেপোর জন্য ধীর বলে মনে হচ্ছে কারণ এটি প্রতিটি কমান্ডের পরে রেপোর স্থিতি পরীক্ষা করে। এই আচরণটি .O_my_zsh এর নতুন সংস্করণে ওভাররাইড করা যেতে পারে। .Zshrc এ কেবল নিম্নলিখিত লাইনটি কমকমেন্ট করুন:

DISABLE_UNTRACKED_FILES_DIRTY = "সত্য"

এর পরে, আপনার টার্মিনালটি পুনরায় চালু করুন বা নিম্নলিখিতগুলি চালান:

উত্স ~ / .zshrc


4
git config --add oh-my-zsh.hide-status 1জিনিসগুলিকে গতি দেয় তবে এটি ভিসিএসের zsh স্থিতিটি সম্পূর্ণভাবে সরিয়ে দেয়। এটি এটিকে রাখে এবং এখনও এটির গতি বাড়ায়।
nyxz

4
আমি আশা করছিলাম এটি কৌশলটি করবে তবে উত্স। / .Zshrc এর পরেও কোনও প্রভাব ফেলবে না। git config --add oh-my-zsh.hide-dirty 1যদিও আমার জন্য কাজ করেছে। git config --global --add oh-my-zsh.hide-dirty 1সমস্ত repos জন্য এটি অক্ষম।
জনাথন এলমোর

@ জোনাথন এলমোর @ পিউয়ুশ, সেটিংয়ের DISABLE_UNTRACKED_FILES_DIRTY="true"মতো একই কাজ করেন না oh-my-zsh.hide-dirty, যদিও তারা একই রকম। কোডটি এখানে দেখুন: github.com/ohmyzsh/ohmyzsh/blob/master/lib/git.zsh#L17DISABLE_UNTRACKED_FILES_DIRTYসেটিং কেবল একটি যোগ --untracked-files=noপতাকা git status, কমান্ড যেহেতু oh-my-zsh.hide-dirty 1সেটিং পুরো এড়িয়ে যাবে git statusপুরাপুরি কমান্ড। আমি @ জনাথন এলমোরের বিশ্বব্যাপী গিট কনফিগার সেটিংয়ের পরামর্শ প্রস্তাব করছি।
stwr667

13

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

git config --global --add oh-my-zsh.hide-dirty 1

যদি আমি এটি কেবল একটি একক রেপোর জন্য চাই:

git config --add oh-my-zsh.hide-dirty 1

12

এটি প্রতিটি কমান্ডের পরে থিম কলিং গিট এবং আরভিএম স্টাফ হতে পারে।

আমার জন্য, প্রতিটি কমান্ডের পরে 2 সেকেন্ড বিলম্বকে সম্পূর্ণরূপে অপসারণ করতে পরিবর্তন ZSH_THEME="juanghurtadoto"করা ZSH_THEME="miloshadzic"

থিমগুলি https://github.com/robbyrussell/oh-my-zsh/wiki/themes এ পাওয়া যাবে


মজাদার. +1 এটি আমার উত্তরের চেয়ে বেশি নির্দিষ্ট।
ভনসি

11

oh-my-zsh" Zsh অবিশ্বাস্যভাবে আস্তে আস্তে শুরু হয় ", প্লাগইন বিভাগটি পরিষ্কার করে বিশদে রেকর্ড করার বিভিন্ন উপায় রয়েছে।

উদাহরণস্বরূপ, ব্লগ পোস্ট " ওহ-মাই-জিএসএস গিট-এসএনএন প্রম্পট স্লোনেস ফিক্স " parse_git_dirtyফাংশনটিকে একটি সম্ভাব্য সমস্যা হিসাবে উল্লেখ করেছে ।


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

সংক্ষিপ্ত পোস্টটি আমার জন্য অল্প পরিমাণে উন্নতি করেছে, কিন্তু পার্স_গিট_ডার্টি অপসারণ করে সত্যই জিনিসগুলি বাড়িয়ে তুলেছে। ধন্যবাদ
রাজ

6

আমি অবশেষে এটি সন্ধান। আমার প্রকল্পে rakeএকটি টন ফাইল (20,000 এর মতো) সহ একটি ফোল্ডার ছিল । সেই ফোল্ডারটি কী ছিল সে সম্পর্কে আমার কোনও ধারণা নেই তবে আমি এটি মুছে ফেলেছি, জেডএস আর ধীর নেই, এবং আমার অ্যাপ্লিকেশনটি এখনও কাজ করছে বলে মনে হচ্ছে।


আকর্ষণীয় প্রতিক্রিয়া (আমার উত্তর চেয়ে আরও সুনির্দিষ্ট) +1
ভনসি

4
এবং এটি বের করতে আমার কেবল 4 মাস সময় লেগেছে!
জেসন সোয়েট

আমি যে দ্রুত খুঁজে! আমি এমন কয়েকজনকে জানি যারা বেশ কয়েক বছর সময় নেয় ;) মেটা.স্ট্যাকেক্সেঞ্জার
কুইকশানস /

3

আপনি অন্য সংস্করণ নিয়ন্ত্রণ প্রোগ্রাম যত্ন সম্পর্কে না তাহলে কিন্তু git, আপনি শুধু সব নিষ্ক্রিয় করতে পারেন vcs_infoআপনার গুলি *.zsh-themeএবং তাদের নেটিভ প্রতিস্থাপন gitকমান্ড।

উদাহরণস্বরূপ agnoster.zsh-theme:

  1. মন্তব্য / সমস্ত লাইন যে মুছে ফেলুন vcs_info,
  2. prompt_git()থেকে কার্য সম্পাদন কোড :

    ref="$vcs_info_msg_0_" প্রতি

    ref="$(git branch 2>/dev/null | grep -Po '(?<=\* ).*$')"

সুতরাং, মূলত, আমি সবেমাত্র সমস্ত vcs_infoক্রিয়া অক্ষম করেছি এবং পরিবর্তে gitরেপোর স্ট্যাটাসগুলি পরীক্ষা করার জন্য একটি নেটিভ কমান্ড ব্যবহার করি। ফলস্বরূপ, আমি এখনও আমার গিট প্রম্পটটিকে নন-গিট ডিরেক্টরিতে কাজ করার মতো গতির সাথে দেখতে পাচ্ছি। এই ছোট পরিবর্তন দ্বারা, আমার zsh গিট রেপোসের মধ্যে 4-5x দ্রুত কাজ করতে পারে।

দ্রষ্টব্য: BSN গ্রেপ নয় GNU গ্রেপ ব্যবহার করুন।


1

উপরের উত্তরগুলি আমার সমস্যার সমাধান করেনি। আমার ক্ষেত্রে, ফাংশনটি git_prompt_statusঅন্যদের তুলনায় অনেক বেশি সময় নেয়। সুতরাং আমি git_prompt_statusআমার প্রারম্ভিক রিটার্ন সংস্করণের সাথে ফাংশনটি প্রতিস্থাপন করে ~ / .oh-my-zsh / lib / git.zsh পরিবর্তন করেছি:

function git_prompt_status() {
  STATUS="$ZSH_THEME_GIT_PROMPT_MODIFIED$STATUS"
  echo $STATUS
  return

  local INDEX STATUS
  INDEX=$(command git status --porcelain -b 2> /dev/null)
  STATUS=""
  if $(echo "$INDEX" | command grep -E '^\?\? ' &> /dev/null); then
    STATUS="$ZSH_THEME_GIT_PROMPT_UNTRACKED$STATUS"
  fi
  if $(echo "$INDEX" | grep '^A  ' &> /dev/null); then
    STATUS="$ZSH_THEME_GIT_PROMPT_ADDED$STATUS"
  elif $(echo "$INDEX" | grep '^M  ' &> /dev/null); then
    STATUS="$ZSH_THEME_GIT_PROMPT_ADDED$STATUS"
  elif $(echo "$INDEX" | grep '^MM ' &> /dev/null); then
    STATUS="$ZSH_THEME_GIT_PROMPT_ADDED$STATUS"
  fi
  if $(echo "$INDEX" | grep '^ M ' &> /dev/null); then
    STATUS="$ZSH_THEME_GIT_PROMPT_MODIFIED$STATUS"
  elif $(echo "$INDEX" | grep '^AM ' &> /dev/null); then
    STATUS="$ZSH_THEME_GIT_PROMPT_MODIFIED$STATUS"
  elif $(echo "$INDEX" | grep '^MM ' &> /dev/null); then
    STATUS="$ZSH_THEME_GIT_PROMPT_MODIFIED$STATUS"
  elif $(echo "$INDEX" | grep '^ T ' &> /dev/null); then
    STATUS="$ZSH_THEME_GIT_PROMPT_MODIFIED$STATUS"
  fi
  if $(echo "$INDEX" | grep '^R  ' &> /dev/null); then
    STATUS="$ZSH_THEME_GIT_PROMPT_RENAMED$STATUS"
  fi
  if $(echo "$INDEX" | grep '^ D ' &> /dev/null); then
    STATUS="$ZSH_THEME_GIT_PROMPT_DELETED$STATUS"
  elif $(echo "$INDEX" | grep '^D  ' &> /dev/null); then
    STATUS="$ZSH_THEME_GIT_PROMPT_DELETED$STATUS"
  elif $(echo "$INDEX" | grep '^AD ' &> /dev/null); then
    STATUS="$ZSH_THEME_GIT_PROMPT_DELETED$STATUS"
  fi
  if $(command git rev-parse --verify refs/stash >/dev/null 2>&1); then
    STATUS="$ZSH_THEME_GIT_PROMPT_STASHED$STATUS"
  fi
  if $(echo "$INDEX" | grep '^UU ' &> /dev/null); then
    STATUS="$ZSH_THEME_GIT_PROMPT_UNMERGED$STATUS"
  fi
  if $(echo "$INDEX" | grep '^## [^ ]\+ .*ahead' &> /dev/null); then
    STATUS="$ZSH_THEME_GIT_PROMPT_AHEAD$STATUS"
  fi
  if $(echo "$INDEX" | grep '^## [^ ]\+ .*behind' &> /dev/null); then
    STATUS="$ZSH_THEME_GIT_PROMPT_BEHIND$STATUS"
  fi
  if $(echo "$INDEX" | grep '^## [^ ]\+ .*diverged' &> /dev/null); then
    STATUS="$ZSH_THEME_GIT_PROMPT_DIVERGED$STATUS"
  fi
  echo $STATUS
}

আমি নির্ধারিত চিহ্ন হিসাবে ZSH_THEME_GIT_PROMPT_MODIFIED ব্যবহার করার সময়, আপনি যে কোনও স্থিতি আপনাকে ইঙ্গিত করতে পছন্দ করেন বা git_prompt_statusআপনার ক্ষেত্রে আরও দ্রুত কার্য সম্পাদন করতে চান তা বেছে নিতে পারেন ।


0

যে কেউ স্পেসশিপ থিম ব্যবহার করছে তার জন্য এটি যুক্ত করুন .zshrc:

SPACESHIP_GIT_STATUS_SHOW="false"

আমার জন্য কাজ। স্পষ্টতই, আপনি আপনার টার্মিনাল প্রম্পটে গিট স্ট্যাটাসটি হারাবেন।

এই থিমটির জন্য গিট বিকল্পগুলি এখানে পাওয়া যাবে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.