developer tip

Git 상태를 완료하는 데 오랜 시간이 걸립니다.

copycodes 2020. 11. 11. 20:17
반응형

Git 상태를 완료하는 데 오랜 시간이 걸립니다.


gitWindows 컴퓨터의 로컬 디렉터리에있는 파일을 관리하는 데 사용 하고 있습니다. 여기에는 네트워크가 포함되어 있지 않으며 다른 컴퓨터로 밀거나 당기지 않습니다. 내 디렉토리에는 100 개의 파일이 있고 모든 테스트 파일은 매우 작습니다. 를 실행하면 git status완료하는 데 정기적으로 20-30 초가 걸립니다. 이것은 정상입니까? 속도를 높이기 위해 할 수있는 일이 있습니까, 아니면 내 저장소 상태 (변경된 파일, 추적되지 않은 파일 등)를 확인하는 더 좋은 방법이 있습니까? 다른 git명령은 훨씬 빨리 완료되는 것 같습니다.


git gc 를 사용해 보셨습니까 ? 이것은 git repo에서 찌그러진 부분을 정리합니다.


어떤 종류의 바이러스 보호 소프트웨어를 사용하고 있습니까? 그것이 방해가되는 것일 수도 있습니다. git1000 개의 파일 저장소가있는 Windows에서 매우 빠릅니다.


비슷한 문제에서 기존 git repo 아래의 디렉토리에 git repo가 ​​있으면 엄청난 속도가 느려지는 것을 발견했습니다.

보조 git repo를 다른 곳으로 옮겼는데 이제 속도가 빠릅니다!


어떤 이유로 git status저장소 폴더를 새 위치로 이동하거나 복사 한 후에는 특히 느립니다.

이 경우 후속 실행이 일반적으로 더 빠릅니다.


재 포장을 시도해 보셨습니까? git-repack .

그렇지 않으면 디렉터리를 복제하고 복제 된 디렉터리에서 .git 폴더를 삭제하십시오. 그런 다음 새 git 디렉토리를 만들고 여전히 느린 지 확인하십시오.

여전히 느린 경우 시스템 또는 하드웨어 문제로 들립니다. Git은 5 초 이내에 수백 개의 파일에 대한 상태를 완료합니다.


git status전역 .gitignore파일이 액세스 할 수없는 네트워크 공유에 저장된 Windows 사용자 프로필에 있었기 때문에 속도가 매우 느 렸습니다 (최대 1 분) .

git config --global core.excludesfile
같은 것을 보여 주었다 \\Nxxxx0\User\Username\Eigene Dateien\gitignore_global.txt

어떤 이유로 \\Nxxxx0액세스 할 수없고 내 사용자 프로필이 백업 시스템에서로드되었습니다 \\Nxxxxx1. 일반적으로 내 사용자 프로필이 엔터프라이즈 시작 스크립트에 의해 드라이브 문자에 바인딩되어 있고 해당 드라이브 문자에 액세스하는 것이 평소와 같이 작동하기 때문에이를 파악하는 데 시간이 좀 걸렸습니다. git-config가 드라이브 문자가 아닌 네트워크 공유를 사용하는 이유를 잘 모르겠습니다 (아마도 젊은 사람이 비난받을 것입니다)

설정 후
git config --global core.excludesfile $HOME/Eigene\ Dateien/gitignore_global.txt
git status정상 속도로 돌아 왔습니다.


나에게 문제는 내 로컬 하드 드라이브에 많은 다른 리포지토리가 복제되어있을수록 더 많은 리포지토리가 git status와 같은 명령을 실행하는 데 더 오래 걸린다는 것입니다.

더 이상 로컬에서 필요하지 않은 리포지토리를 많이 삭제하고 git 상태가 1 분 ~ 5 초로 변경되었습니다.

여기에서는 이와 비슷한 답변을 볼 수 없습니다.


git status개선 될 또 다른 측면 (Git 2.14.x / 2.15, Q4 2017)은 무시 된 파일도 표시하는 경우입니다 ( git status --ignored).

" git status --ignored", 추적 된 경로가없는 디렉토리가 무시됨을 알면 디렉토리에서 무시 된 모든 경로를 계속 열거하므로 불필요합니다.
이 오버 헤드를 방지하기 위해 코드 경로가 최적화되었습니다.

Jameson Miller ( )의 commit 5aaa7fd (2017 년 9 월 18 일)를 참조하십시오 . (의해 병합 Junio C 하마노 - -커밋 075bc9c 29 구월 2017)jamill
gitster

성능 향상 git status --ignored

비어 있지 않은 무시 된 디렉터리를 나열하려는 경우 디렉터리 나열 논리의 성능을 향상시킵니다. 비어 있지 않은 무시 된 디렉토리를 표시하기 위해 기존 로직은 무시 된 디렉토리의 모든 내용을 반복적으로 반복합니다.
이 변경은 첫 번째 파일을 찾으면 컨텐츠 반복을 중지하는 최적화를 도입합니다. 이는 무시 된 디렉토리에 많은 파일이있는 저장소에서 'git status --ignored'성능을 크게 향상시킬 수 있습니다.

무시 된 400 개의 디렉토리에 196,000 개의 파일이있는 예제 저장소의 성능 차이의 예는 다음과 같습니다.

| Command                    |  Time (s) |
| -------------------------- | --------- |
| git status                 |   1.2     |
| git status --ignored (old) |   3.9     |
| git status --ignored (new) |   1.4     |

더 많은 개선 사항 (Git 2.17, 2018 년 2 분기에 설정 됨) 은이 답변을 참조하십시오 .


달리기 git fsck는 과거에이 문제를 해결했습니다.


제 경우 git status에는 프로젝트의 파일 소유자가 아닌 다른 사용자로 실행 하여 속도가 느려졌습니다 .

모든 경우에 적용 할 수있는 것은 아니지만 chown현재 사용자 에게 간단한 방법 이 도움이 될 수 있습니다.


이전 버전의 git에는 git 상태와 관련된 성능 문제가 있습니다. 자세한 내용은 git 상태 성능을 개선하는 방법을 참조하세요 .

git 2.13에는 1 개의 수정 사항과 2.17 개의 수정 사항이 있습니다. 2.7에서 2.23으로 이동했고 느린 상태를 해결했습니다. 곧 2.24에 대한 또 다른 개선이 계획되어 있습니다.


Try starting with a fresh clone of your checkout.

git clone myrepo mynewrepo

and then do git status in mynewrepo.

Alternatively, and if you are braver, clean out the rubbish from your existing checkout.

git clean -dfx

This avoids git having to scan some (possibly large) set of ignored or not checked-in files.

참고URL : https://stackoverflow.com/questions/1183769/git-status-takes-a-long-time-to-complete

반응형