development

Git Bash는 Windows 7 x64에서 매우 느립니다.

big-blog 2020. 2. 20. 23:31
반응형

Git Bash는 Windows 7 x64에서 매우 느립니다.


작은 프로젝트를 개발하는 동안 Windows와 Ubuntu에서 Git을 사용하여 자주 두 프로젝트 사이를왔다 갔다했습니다. 문제는 Git Bash가 지속적으로 느려진다는 것입니다.

느리게 말하면 달리기 cd는 8-25 초가 걸리고 달리는 git명령은 5-20 초가 ls걸리며 때로는 30 초까지 걸릴 수 있습니다. 말할 것도없이, 이것은 비생산적이면서도 재미 있지 않습니다. Windows에서 Git이 느리다는 것을 알고 있지만 이것은 우스운 일입니다.

나를 위해 일한 한 가지 해결책은 ( 이 답변 에서 제안한대로) 네트워크 연결을 비활성화하고 Git Bash를 시작한 다음 다시 연결하는 것입니다. 때로는 며칠 동안 계속해서 빠르게 실행되지만 성능은 항상 저하됩니다. 몇 주 동안 msysgit 토론 그룹, Stack Overflow, msysgit 문제 목록 등을 껐다 켰지 만 작동하는 솔루션을 설정할 수 없었습니다.

지금까지 시도했습니다.

  • 바이러스 스캐너의 제외 목록에 Git 및 프로젝트 폴더 추가
  • 바이러스 스캐너를 완전히 비활성화 (Kaspersky IS 2011)
  • Outlook이 실행되고 있지 않은지 확인 (Outlook 2007)
  • 다른 모든 응용 프로그램 종료
  • 관리자로 Git Bash 실행
  • 네트워크 연결 비활성화, Git Bash 시작 및 연결 비활성화
  • 네트워크 연결 비활성화, Git Bash 시작, 연결 다시 활성화 (가끔 만 작동)
  • 달리는 git gc
  • 그리고 위의 조합

나는 두 사람이 Bash 완료를 비활성화하는 데 성공했다는 것을 읽었지만 이상적으로는 적극적으로 유지하고 싶습니다. msysgit의 버전은 1.7.3.1-preview20101002이고 OS는 Windows 7 x64입니다. Linux에서 동일한 작업을 실행하는 것은 예상보다 빠릅니다. Linux를 독점적으로 사용하지만 Windows에서도 특정 응용 프로그램, 테스트 등을 실행해야합니다.

비슷한 문제가 발생한 사람이 있습니까? 그렇다면 근본적인 문제는 무엇이고 해결책은 무엇입니까 (있는 경우)?

이것은 Git 리포지토리를 넘어서지 만 참고를 위해 Git을 사용한 리포지토리는 매우 작습니다. 최대 4-50 파일.


세 가지 명령을 실행하여 구성 옵션을 설정하여 Windows에서 Git 속도를 크게 높일 수 있습니다.

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

노트:

  • core.preloadindex 대기 시간 숨기기를 위해 파일 시스템 작업을 병렬로 수행

  • core.fscache UAC 문제를 수정하여 관리자 권한으로 Git을 실행할 필요가 없습니다 (업데이트 : Windows 2.8 용 Git에서 기본적으로 활성화 됨)

  • gc.auto .git /의 파일 수를 최소화


배쉬 프롬프트에 Git 정보가 표시되어 있습니까? 그렇다면 모든 명령에서 실수로 너무 많은 작업을 수행했을 수 있습니다. 이 이론을 테스트하려면 Bash에서 다음 임시 변경을 시도하십시오.

export PS1='$'

내 Windows 홈 디렉토리가 네트워크에 있으며 Git Bash 명령이 먼저 찾고 있다고 생각했습니다. 필자가 충분히 살펴 보았을 때 Windows 파일 서버의 공유 위치 존재하지 않더라도 먼저 $PATH나열했습니다 . 내보내기 명령을 먼저 편집 하고 주석 처리했습니다 ./h/bin/h/h/bin
/etc/profile$PATH

#export PATH="$HOME/bin:$PATH"

이것은 아마도 Git Bash가 더 이상 네트워크를 통해 실행 파일을 찾지 않기 때문에 명령이 훨씬 빠르게 실행되도록했습니다. 내가 /etc/profile있었다 c:\Program Files (x86)\Git\etc\profile.


네트워크 드라이브가 성능 문제라는 것을 알았습니다. HOME느린 네트워크 공유를 가리키고있었습니다. 나는 무시할 수 HOMEDRIVE없었지만 그것은 내가 본 것에서 문제가되지 않습니다.

데스크탑-> 속성-> 고급 시스템 설정-> 환경 변수 사용자 변수에 추가 섹션에서 컴퓨터를 마우스 오른쪽 단추로 클릭하여 환경 변수를 설정하십시오.

HOME=%USERPROFILE%

Chris Dolan의 답변을 확장하여 다음과 같은 대체 PS1설정을 사용했습니다 . ~ / .profile에 코드 조각을 추가하기 만하면됩니다 (Windows 7 : 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\]\u@\h \[\033[33m\w$(fast_git_ps1)\033[0m\]
$ '

이렇게하면 채색 된 쉘의 이점과 현재 분기 이름 (Git 저장소의 경우)이 표시되지만 내 컴퓨터에서는 ~ 0.75 초에서 0.1 초까지 훨씬 빠릅니다.

블로그 게시물을 기반으로 합니다 .


귀하의 문제는 네트워크 기반 일 수 있지만 개인적으로 git status두 가지 수정을 수행하여 로컬 통화를 10 배 (7 + 초에서 700ms로 단축)했습니다. 이 파일은 21,000 개의 파일과 과도한 수의 큰 이진 파일이있는 700MB 저장소에 있습니다.

하나는 병렬 인덱스 사전로드를 활성화하는 것입니다. 명령 프롬프트에서 :

git config core.preloadindex true
이것은 time git status7 초에서 2.5 초로 변경되었습니다 .

최신 정보!

다음은 더 이상 필요하지 않습니다. 패치는 mysysgit 1.9.4부터이 문제를 해결했습니다.
https://github.com/msysgit/git/commit/64d63240762df22e92b287b145d75a0d68a66988
그러나 입력하여 수정 프로그램을 활성화해야합니다
git config core.fscache true

또한 UAC 및 "luafv"드라이버를 비활성화했습니다 (재부팅 필요). 이렇게하면 Windows Vista, 7 및 8에서 시스템 위치에 쓰려고하는 프로그램을 리디렉션하고 해당 액세스를 사용자 디렉터리로 리디렉션하는 드라이버를 비활성화합니다.

이것이 Git 성능에 미치는 영향에 대한 토론을 보려면 다음을 참조하십시오. https://code.google.com/p/msysgit/issues/detail?id=320

이 드라이버를 비활성화하려면 regedit에서 "start"키 HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/luafv를 4로 변경 하여 드라이버를 비활성화하십시오. 그런 다음 UAC를 가장 낮게 설정하고 "알리지 마십시오".

이 드라이버를 비활성화하면주의해야 할 경우 (필수) 대안은 시스템 파티션과 다른 드라이브 (또는 파티션)에서 실행중인 것입니다. 분명히 드라이버는 시스템 파티션의 파일 액세스에서만 실행됩니다. 나는 두 번째 하드 드라이브를 가지고 있으며 D 드라이브에서하지 않고 C 드라이브 에서이 레지스트리 수정으로 실행할 때 동일한 결과를 봅니다.

이 변경은 time git status2.5 초에서 0.7 초로 걸립니다.

https://github.com/msysgit/git/pull/94https://github.com/git/git/commit/d637d1b9a8fb765a8542e69bd2e04b3e229f663b 에 따라 Windows에서 속도 문제와 관련하여 어떤 추가 작업이 진행 중인지 확인할 수 있습니다. .


Git을 완전히 제거하고 다시 시작 (클래식 Windows 치료) 한 후 Git을 다시 설치하는 것이 치료 방법 인 것으로 보입니다. 또한 남은 모든 bash 구성 파일을 지 웠습니다 (수동으로 생성되었습니다). 모든 것이 다시 빠릅니다.

어떤 이유로 다시 설치할 수 없거나 바람직하지 않은 경우 Chris Dolan의 답변 에서 참조 된 PS1 변수를 변경하려고 시도합니다 . 특정 작업에서 속도가 크게 향상되었습니다.


"관리자 권한으로 실행"으로 cmd.exe를 시작하여 Windows 7 x64에서 느린 Git 문제를 해결했습니다.


here 권장대로 core.preloadindex를 true로 설정하여 상당한 개선을 보았습니다 .


Chris Dolan과 Wilbert의 답변에서 언급했듯이 PS1은 속도를 늦 춥니 다 .

Dolan에서 제안한대로 완전히 비활성화하거나 Wilbert에서 제공하는 스크립트를 사용하는 대신 훨씬 빠른 "dumb 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\]# '

Cygwin에서 이것은 Wilbert의 "fast_Git_PS1"답변 보다 200ms 대 400ms 보다 빠르 므로 약간의 프롬프트 부진을 없애줍니다.

처럼 복잡하지 않다 __git_ps1당신이 .git 디렉토리 등으로하지만, 일상적인 사용을위한 CD가 좋은 충분하고 빠른 때, 예를 들어이 프롬프트를 변경하지 않습니다 -.

이것은 Git 1.7.9 (Cygwin에서 테스트되었지만 모든 플랫폼에서 작동해야 함)입니다.


Git Bash와 Git GUI에서 동일한 문제가 발생했습니다. 두 프로그램 모두 잘 작동하는 데 사용되지만 크롤링 속도가 임의로 느려졌으며 그 이유를 알 수 없었습니다.

결과적으로 Avast였습니다. Avast는 다양한 프로그램 (내가 작성한 프로그램 포함)에 이상한 일이 발생했기 때문에 잠시 동안 사용하지 않도록 설정했으며 Bash는 Linux에서와 같이 빨리 실행됩니다. 방금 Git 프로그램 파일 폴더 ( C:\Program Files\Git)를 Avast 제외 목록에 추가했으며 이제는 Linux에서와 같이 빠르게 실행됩니다.

그리고 예, 안티 바이러스 소프트웨어는 원래 게시물의 문제가 아니라는 것을 알고 있지만 누군가에게 유용 할 수 있도록 여기에 넣겠습니다.


다음 Git 구성을 변경하여 성능이 크게 향상 될 수도 있습니다.

git config --global status.submoduleSummary false

git statusWindow 7 x64 에서 간단한 명령을 실행할 때 컴퓨터를 실행하는 데 30 초 이상이 걸렸습니다. 이 옵션이 정의되면 명령이 즉시 수행됩니다.

다음 페이지에 설명 된대로 Git의 자체 추적을 활성화하면 설치에서 다를 수있는 문제의 원인을 발견하는 데 도움이되었습니다. https://github.com/msysgit/msysgit/wiki/Diagnosing-why-Git-is-so- 느린


이러한 다른 답변 외에도 병렬 하위 모듈 가져 오기를 사용하여 여러 하위 모듈이있는 프로젝트를 가속화했습니다 (2016 년 초 Git 2.8 이후).

이를 사용하여 수행 하거나 git fetch --recurse-submodules -j8설정할 수 있지만 사용 git config --global submodule.fetchJobs 8하거나 사용하려는 많은 코어가 있습니다.


cmd에서 Git을 사용하는 경우 Git Bash에서 Git을 실행하십시오. cmd에서 git.exe는 실제로 시작할 때마다 올바른 환경을 설정 한 다음 실제 git.exe 만 시작하는 래퍼입니다. 원하는 작업을 수행하는 데 필요한 시간보다 최대 두 배의 시간이 걸릴 수 있습니다. 그리고 Git Bash는 시작할 때만 환경을 설정합니다.


장치 관리자에서 AMD Radeon Graphics (또는 Intel Graphics)를 끄는 것만으로도 도움이되었습니다.

여기에 이미지 설명을 입력하십시오

나는 여기에서 대답을 찾았습니다 : https://superuser.com/questions/1160349/git-is-extremely-slow-on-windows# =


결합 된 답변 :

  1. Wilbert 's -PS1에 포함 할 정보
  2. 의를 sinelaw - (<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://stackoverflow.com/questions/4485059/git-bash-is-extremely-slow-in-windows-7-x64/19500237#19500237
# https://stackoverflow.com/questions/4485059/git-bash-is-extremely-slow-in-windows-7-x64/13476961#13476961
# https://stackoverflow.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}\u@\h ${YELLOW}\w${CYAN}$(fast_git_ps1)${RESET}\] $ '

결과:

frolowr @ RWAMW36650 / c / projects / elm-math-kids (마스터) $


Windows 7 x64에서 Git for Windows (msysgit)를 제한된 사용자 계정으로 실행하는 것과 같은 문제가 꽤 오랫동안 발생했습니다.

여기서 읽은 내용과 다른 곳에서 공통 주제는 관리 권한 및 / 또는 UAC가없는 것 같습니다. 내 시스템에서 UAC가 꺼져 있으므로 프로그램 파일 디렉토리에서 무언가를 쓰거나 삭제하려고한다는 설명이 가장 적합합니다.

어쨌든 휴대용 버전의 Git 1.8을 zipinstaller와 함께 설치하여 문제를 해결했습니다. zipinstaller가 작동하려면 .7z 배포 파일의 압축을 풀고 ZIP 파일로 다시 압축해야했습니다. 또한 해당 디렉토리를 시스템 경로에 수동으로 추가해야했습니다.

이제 성능이 좋습니다. Program Files (x86)제한된 사용자로 권한이없는 디렉토리에 설치되어 있지만 동일한 문제가 발생하지 않는 것 같습니다.

필자는 휴대용 버전이 파일을 쓰거나 삭제하는 위치에서 약간 더 보수적이라는 사실, 아마도 경우에 따라 1.7에서 1.8로 업그레이드한다는 사실을 언급합니다. Bash를 포함하여 현재 더 잘 작동한다고 말하는 것으로 충분합니다.


필자의 경우 실제로 Git Bash로 이어지는 Avast 바이러스 백신이었고 PowerShell조차도 실제로 느려졌습니다.

먼저 Avast를 10 분 동안 비활성화하여 속도가 향상되는지 확인했습니다. 그 후, 읽기, 쓰기 및 실행을 위해 전체 Git Bash 설치 디렉토리를 Avast의 예외로 추가했습니다. 내 경우에는이었다 C:\Program Files\Git\*.


위의 어느 것도 나를 도울 수 없었습니다. 내 시나리오에서 문제는 다음과 같이 나타납니다.

  • 모든 ll명령은 느린 (실행하는 데 약 3 초를 복용했다)했다
  • 후속 ls 명령은 이전 ls 명령에서 45 초 이내에있는 경우에만ll 즉시 실행되었습니다 .

프로세스 모니터 로 디버깅 할 때 모든 명령 전에 DNS 요청이 있음을 발견했습니다.

따라서 방화벽 (제 경우에는 Comodo)을 비활성화하고 명령으로 문제를 실행하자마자 사라졌습니다. 방화벽이 다시 켜졌을 때 다시 되돌아 오지 않습니다. 가장 빠른 기회를 통해 DNS 요청 차단 프로세스의 대상과 대상에 대한 자세한 내용으로이 응답을 업데이트하겠습니다.

BR, G


나는 또한 git PS1 slowness에 문제가 있었지만 오랫동안 데이터베이스 크기 문제 (큰 저장소)라고 생각하고 다양한 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 라인에서 git 현재 분기와 색상 을 사용하면 정상적으로 작동합니다. 빠른 Git 명령 행이 다시 있습니다.


필자의 경우 Git Bash 바로 가기가 설정되었습니다 Start in:%HOMEDRIVE%%HOMEPATH%(Git Bash를 마우스 오른쪽 버튼으로 클릭하고 속성을 선택하여 확인할 수 있습니다). 이것은 네트워크 드라이브였습니다.

해결책은을 가리 키도록하는 것 %HOME%입니다. 그것을 가지고 있지 않다면 환경 변수에서 설정할 수 있으며 이제 Git Bash가 번개처럼 빠릅니다.


광산의 동료는 윈도우 (7)에 힘내에 문제가 있었다 git status checkoutadd빠른 있었지만, git commit나이를했다.

우리는 여전히 그 근본 원인을 찾으려고 노력하고 있지만 저장소를 새 폴더로 복제하면 문제가 해결되었습니다.


많은 사람들이 말했듯이 이것은 stashWindows의 쉘 스크립트 때문이지만 Git 2.18.0 이후 Windows 설치 프로그램은 훨씬 더 빠른 (~ 90 %) 내장 버전의 stash- https : / /github.com/git-for-windows/build-extra/pull/203 .

참고 URL : https://stackoverflow.com/questions/4485059/git-bash-is-extremely-slow-on-windows-7-x64



반응형