programing

오-마이-즈시 느리지만, 특정 깃레포에 대해서만.

itmemos 2023. 7. 16. 12:47
반응형

오-마이-즈시 느리지만, 특정 깃레포에 대해서만.

저는 최근에 Zsh를 사용하기 시작했는데 정말 멋집니다.안타깝게도, 제가 "주요" 프로젝트로 생각하는 프로젝트의 경우, 모든 것이 느립니다.내 말은 내가 명령을 실행할 때마다...ls예를 들어, 명령이 실행되는 시간과 터미널을 다시 사용할 수 있는 시간 사이에는 약 5초의 지연이 있습니다.

Zsh를 그렇게 느리게 만드는 이 하나의 레포에 대해 무엇이 다를 수 있습니까?제가 Zsh를 사용하기 전에는 아무 문제가 없었기 때문에 Zsh만의 것이라고 생각합니다.저는 해봤습니다.git clean하지만 눈에 띄는 차이는 없었습니다.

그게 중요하다면 저는 Mac OS X에 있습니다.

업데이트: 이 내 라인이 표시됩니다..zshenv느린 이유는 다음과 같습니다.

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

그 대사를 댓글로 달면 3초 정도 걸리던 것에서 1초 정도 걸리던 것으로 바뀌게 됩니다.안타깝게도 제 프로젝트 중 많은 부분이 RVM을 사용하기 때문에 그 라인이 필요합니다.이제 어떻게 해야 할지 모르겠어요.

업데이트 2: 이것은 구체적으로 오마이-즈시(oh-my-zsh) 일인 것 같습니다.로드하지 않으면~/.oh-my-zsh/oh-my-zsh.sh 없습니다나는 문제 없어.

이것을 Git 구성에 추가할 수 있으며 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

일부 테마는 자체 Git 쿼리를 생성하고 이러한 플래그를 무시하기도 합니다.

일부 repos는 각 명령 후 repo의 상태를 확인하기 때문에 Oh_my_zsh가 느린 것 같습니다.이 동작은 새 버전의 .oh_my_zsh에서 재정의될 수 있습니다. .zshrc에서 다음 행을 주석을 제거하십시오.

DISABLE_UNTRACKED_FILES_DERTY="true"

그런 다음 터미널을 다시 시작하거나 다음을 실행합니다.

source ~/.zshrc

동기화된 폴더를 사용하고 있기 때문에 VirtualBox(게스트)에서 속도가 느립니다.저는 여전히 충분히 빠른 OS X(호스트)에서 활성화하기를 원합니다.repo와 함께 저장되어 게스트와 호스트 모두에서 변경되는 로컬 구성 설정을 사용하는 대신 게스트에 대해서만 글로벌 구성 설정을 사용합니다.

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

단 한 번의 레포를 위해 필요한 경우:

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

모든 명령 뒤에 git 및 rvm을 호출하는 테마일 수 있습니다.

나를 위해, 변화하는 것.ZSH_THEME="juanghurtadoto"ZSH_THEME="miloshadzic"모든 명령이 완료된 후 2초의 지연 시간이 제거되었습니다.

테마는 https://github.com/robbyrussell/oh-my-zsh/wiki/themes 에서 확인할 수 있습니다.

속도를 높이는 다양한 방법이 있습니다.oh-my-zsh"zsh 시작 속도가 엄청나게 느리다"에서 자세히 설명한 대로 플러그인 섹션을 정리합니다.

예를 들어, 블로그 게시물 "Oh-my-zsh git-svn 프롬프트 느림에 대한 수정"은 다음을 언급합니다.parse_git_dirty잠재적인 문제로 기능합니다.

시간을 , 은 zshgit에서 저의 대기 .40ms4ms:

  1. 최적화된 명령 컴파일 및 설치:

    git clone https://github.com/notfed/git-branch-name
    cd git-branch-name
    make
    sudo install git-branch-name /usr/local/bin/
    
  2. 을 당신의 니추합다에 추가하세요.~/.zshrc:

    function git_prompt_info() {
        ref=$(git-branch-name -q -h 12 -b 64) || return
        echo "${ZSH_THEME_GIT_PROMPT_PREFIX}${ref}${ZSH_THEME_GIT_PROMPT_CLEAN}${ZSH_THEME_GIT_PROMPT_SUFFIX}"
    }
    

(계속)-h그리고.-b 제어합니다

이것으로 저는 엔터를 유지할 수 있고 지연을 경험하지 않을 수 있습니다.

이제야 알았어요.나의 프로젝트는rake20,000개 정도의 파일이 있는 폴더입니다.나는 그 폴더가 무엇을 위해 있었는지 전혀 모르지만, 나는 그것을 삭제했고, Zsh는 더 이상 느리지 않고, 내 앱은 여전히 작동하는 것 같습니다.

다른 버전의 제어 프로그램을 신경쓰지 않는다면,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 작업네브티사용이대신을 합니다.gitrepo의 입니다.결과적으로, 나는 여전히 나의 유용한 Git 프롬프트를 Git이 아닌 디렉토리에서 작업하는 것과 같은 속도로 볼 수 있습니다.이러한 작은 수정으로 myzsh는 gitrepos 내에서 4-5배 더 빠르게 작업할 수 있습니다.

참고: BSD grep이 아닌 GNU grep을 사용합니다.

최고의 솔루션은 다음과 같습니다.

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

이 기능은 작동하지만 지점 이름 및 더러움과 같은 일부 멋진 기능은 사용할 수 없습니다.저에게 효과가 있었던 것은 git의 데이터베이스를 압축하는 것이었지만,aggressive플래그:

git gc --aggressive

위의 답변은 제 문제를 해결하지 못했습니다. 경우에는 제경에는, 가함수우라는 .git_prompt_status다른 사람들보다 너무 많은 시간이 너무 많이 걸립니다.하여 ~/.oh-my-zsh/lib/git.zsh 파일을 했습니다.git_prompt_status 반환버전과 합니다. 기 초 반 과 함 께 기 능 전 내 버 환 :

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_MODEED를 할 수 .git_prompt_status당신의 경우에 기능.

우주선 테마를 사용하는 모든 사용자를 위해 이것을 추가합니다..zshrc:

SPACESHIP_GIT_STATUS_SHOW="false"

저를 위해 일했습니다.터미널 프롬프트에서 Git 상태가 손실됩니다.

이 테마에 대한 Git 옵션은 여기에서 확인할 수 있습니다.

편집

Git 옵션에 대한 업데이트된 링크는 여기에 있습니다.

저도 같은 문제가 있었습니다.하드 코딩된 git 플러그인을 사용하지 않는 모든 테마의 목록을 가져오려면 다음 명령을 실행했습니다.

grep --files-without-match "git" ~/.oh-my-zsh/themes/*

프롬프트가 훨씬 빨라졌지만, 저는 그 어떤 주제도 좋아하지 않았습니다.

저는 전원 라인 10k를 사용하게 되었습니다. 전원 라인 10k는 매우 멋지게 구성할 수 있고 속도 문제가 없습니다.

저는 깃 상태를 유지하고 싶어서 다른 답변들은 모두 저에게 도움이 되지 않았습니다.

Git 저장소에서 이 명령을 실행하는 것이 제게 정말 도움이 되었습니다. Git 저장소에서는 속도가 느렸습니다.

git gc

Garbage Collect의 약자이며 여기서 자세히 설명하지만 기본적으로 다음과 같습니다.

[It] 현재 저장소 내에서 파일 수정사항 압축(디스크 공간 감소 및 성능 향상)과 같은 다양한 하우스키핑 작업 실행

이 명령을 실행한 후 더 이상 로드가 없습니다.모든 것이 다시 즉각적으로 일어났습니다.

repos,repos됩니다.나의 해결책(그리고 나는 오마이제시의 구성을 변경하는 것보다 선호한다)은 실행하는 것입니다.git status천천히 할 때 레포에.

언급URL : https://stackoverflow.com/questions/12765344/oh-my-zsh-slow-but-only-for-certain-git-repo

반응형