oh-my-zsh는 느리지 만 특정 Git 저장소에서만
나는 최근에 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 함수가 있습니다 .
git_prompt_info()
parse_git_dirty()
각 메소드에는 비활성화하는 git 구성 스위치가 있습니다.
oh-my-zsh.hide-status
oh-my-zsh.hide-dirty
일부 테마는 자체 git 쿼리를 생성하고 때때로 이러한 플래그를 무시합니다 .
Oh_my_zsh는 각 명령 후 repo의 상태를 확인하기 때문에 일부 repos의 경우 느린 것 같습니다. 이 동작은 .oh_my_zsh의 새 버전에서 재정의 될 수 있습니다. .zshrc에서 다음 줄의 주석 처리를 제거하십시오.
DISABLE_UNTRACKED_FILES_DIRTY = "true"
그런 다음 터미널을 다시 시작하거나 다음을 실행하십시오.
소스 ~ / .zshrc
oh-my-zsh
" zsh가 엄청나게 느리게 시작됨 "에 자세히 설명 된대로 , 플러그인 섹션을 정리하는 다양한 방법이 있습니다 .
예를 들어 블로그 게시물 " Fix for oh-my-zsh git-svn prompt slowness "에서는이 parse_git_dirty
기능을 잠재적 인 문제로 언급합니다 .
모든 명령 후에 git 및 rvm 항목을 호출하는 테마가 될 수 있습니다.
나를 위해 모든 명령 후 2 초 지연을 완전히 제거하도록 변경 ZSH_THEME="juanghurtadoto"
했습니다 ZSH_THEME="miloshadzic"
.
테마는 https://github.com/robbyrussell/oh-my-zsh/wiki/themes 에서 찾을 수 있습니다.
저에게는 동기화 된 폴더를 사용하고 있기 때문에 VirtualBox (게스트)에서 느립니다. 충분히 빠른 OS X (호스트)에서 활성화하고 싶습니다. 저장소와 함께 저장되고 게스트와 호스트 모두에서 변경되는 로컬 구성 설정을 사용하는 대신 게스트 에서만 전역 구성 설정을 사용합니다 .
git config --global --add oh-my-zsh.hide-dirty 1
단일 리포지토리에 대해서만 원하는 경우 :
git config --add oh-my-zsh.hide-dirty 1
나는 마침내 그것을 알아 냈습니다. 내 프로젝트에는 rake
수많은 파일 (예 : 20,000 개) 이있는 폴더가 있습니다. 그 폴더가 무엇인지 모르겠지만 삭제했고 Zsh가 더 이상 느리지 않고 내 앱이 여전히 작동하는 것 같습니다.
다른 버전 관리 프로그램에 대해 걱정하지만하지 않는 경우 git
, 당신은 모두 비활성화 할 수 있습니다 vcs_info
당신의의를 *.zsh-theme
네이티브로 교체 git
명령.
예를 들어 다음과 같이 조정 agnoster.zsh-theme
합니다.
- / 언급 된 모든 행을 제거
vcs_info
, prompt_git()
함수에서 코드 편집 :ref="$vcs_info_msg_0_"
...에ref="$(git branch 2>/dev/null | grep -Po '(?<=\* ).*$')"
따라서 기본적으로 모든 vcs_info
작업을 비활성화 하고 대신 git
저장소의 상태를 확인 하기 위해 기본 명령을 사용합니다 . 결과적으로 git이 아닌 디렉토리에서 작업하는 것만 큼 빠른 속도로 유용한 git 프롬프트를 볼 수 있습니다. 이 작은 수정으로 내 zsh는 git repos 내에서 4-5 배 빠르게 작업 할 수 있습니다.
참고 : BSD grep이 아닌 GNU grep을 사용하십시오.
위의 답변으로는 문제가 해결되지 않았습니다. 제 경우에는 다른 기능 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_MODIFIED를 미결정의 표시로 사용하는 동안 원하는 상태를 선택하여 표시하거나 git_prompt_status
귀하의 경우에 훨씬 더 빠른 기능을 구현할 수 있습니다.
참고 URL : https://stackoverflow.com/questions/12765344/oh-my-zsh-slow-but-only-for-certain-git-repo
'Development Tip' 카테고리의 다른 글
Rails 3는 유효성 검사 및 콜백 건너 뛰기 (0) | 2020.10.31 |
---|---|
"/", "\"를 사용한 플랫폼 독립적 경로 연결? (0) | 2020.10.31 |
Bash의 배열에서 고유 한 값을 얻으려면 어떻게해야합니까? (0) | 2020.10.31 |
Git Bash 터미널에서 Bitbucket에 새 저장소를 만드시겠습니까? (0) | 2020.10.31 |
bash에서 파일의 절대 디렉토리를 어떻게 얻습니까? (0) | 2020.10.31 |