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


85

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


어떤 git 버전을 사용하고 있습니까? msysGit Google Group 또는 git 메일 링리스트 (git [at] vger.kernel.org, 구독 할 필요 없음)에서 도움을 요청하십시오. 아마도 이것은 git의 버그 일 것입니다.
Jakub Narębski

답변:


127

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


3
이것은 속임수를 쓴 것 같습니다. 몇 번만 커밋하면 저장소에 정리할 수있는 많은 항목이 있다는 사실에 매우 놀랐습니다. 감사합니다!
Matt McMinn

4
Hehe, 방금 명령을 git status사용하여 time실행했고 30.464 초의 "실제"시간을 얻었습니다. 그런 git gc다음 time git status다시 한 번 실행 하여 35.409s의 실시간을 얻었습니다. 꽤 이상합니다.
RyanScottLewis 2011

14
이로 인해 대부분의 저장소에서 33 초에서 1 초 미만으로 수정되었습니다. Git이 그 지점에 도달하기 시작할 때 이렇게하라고하면 좋을 것입니다. 나는 그것이 필요하다는 것을 결코 알지 못했습니다.
XP84

연속으로 git status여러 번 실행 하는 경우 후속 실행은 첫 번째 실행의 일부만 차지합니다. 실행중인 경우에 따라서, git status다음, git gc다음 git status,이를 것으로 예상된다 다시 슈퍼 빠른 실행됩니다.
kiewic

7

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

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


비슷한 문제를 추가합니다. 무슨 일이 일어 났는지 하위 디렉토리에서 git init가 수행되었습니다. 그 문제는 subdir이 일종의 숨겨져 있다는 것입니다 (변경 사항을 보려면 내부에서 git 상태를 수행해야 함) .git이 여전히 계산을 시도하고 있다고 생각합니다. 나는 subdir을 무시하고 모든 것이 이제 괜찮습니다.
MB14

6

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


1
예, 고용주는 TrendMicro OfficeScan을 의무화했습니다. 나는 바이러스 스캐너를 죽였고 git 상태와 같은 결과를 얻었습니다.
Matt McMinn

1
이 테마의 또 다른 변형은 Credant와 같은 즉각적인 암호화 소프트웨어로, 상자를 현저하게 느리게 만들 수 있습니다.
Don Branson

이것이 저에게 문제였습니다. Kaspersky 바이러스 백신을 죽였고 상태가 1 초 미만으로 돌아 왔습니다.
Robin Winslow 2013

5

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

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

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


repack이 도움이되는 것 같았습니다. 실행 후 상태를 실행하고 즉시 반환되었습니다. 하지만 몇 초 기다렸다가 상태를 다시 실행했는데 30 초가 걸렸습니다. 나는 디렉토리를 복제하려고 시도했지만 동일한 문제가 발생했습니다.
Matt McMinn

흠, 흥미 롭군요. 외장 드라이브가 있습니까? 아니면 USB 플래시 스틱? 저기 저장소를 복사하고 차이점이 있는지 확인하십시오. 현재 사용중인 드라이브에 문제가있을 수 있습니다.
thedz jul

USB 드라이브에는 차이가 없습니다.
Matt McMinn

정말 이상합니다. 이 시점에서 내가 정말로 말할 수있는 것은 내가 모른다는 것이다. 리포지토리를 복사하여 다른 사람의 컴퓨터에서 시도해 볼 수 있습니다. 최소한 시스템에 국한된 문제인지 알려야합니다.
thedz jul

4

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

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


1
첫 번째 실행에서 이러한 속도 저하를 피할 수있는 방법이 있습니까? git gc를 시도했지만 도움이되지 않았습니다. 파일을 복사 한 후 처음에만 발생하므로 문제가되지 않습니다.
franksands

초기 속도 저하를 피할 수있는 방법은 모르지만이를 수행 할 수있는 명령이 있다면 초기 git status명령 과 동일한 작업을 수행 할 것이므로 완료하는 데 같은 시간이 걸릴 수 있습니다.
DanJAB

4

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정상 속도로 돌아 왔습니다.


3

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


3

저에게 느린 속도는 추적되지 않은 파일 (스크립트의 임시 및 출력 파일)이 많기 때문입니다. Running git status -uno, 추적되지 않은 파일을 제외하고 훨씬 빠르게 실행되며 내 요구 사항을 충족합니다.


1

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

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

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


1
나는 이것이 git status어떤 식 으로든 한 디렉토리에서 실행 하는 표준에 영향을 줄 수 있다고 생각하지 않습니다 . 저장소가 다른 디렉토리로 체크 아웃되면 git status한 번에 하나만 실행할 수 있습니다 . git repos가 겹치면 다른 이야기가 될 수 있지만 어쨌든 나쁜 생각입니다.
Hubert Grzeskowiak

@HubertGrzeskowiak 확실히 할 수 있습니다. 그들은 나를 위해 내 하드 드라이브의 다른 위치에 있었지만 git status를 입력 할 때로 드 시간에 큰 영향을 미쳤습니다. 중복 저장소를 제거한 후 즉시 몇 분에서 5 초로 빨라졌습니다.
Jack Perry

1

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

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

Jameson Miller ( )의 commit 5aaa7fd (2017 년 9 월 18 일)를 참조하십시오 . (Merged by Junio ​​C Hamano -- in commit 075bc9c , 29 Sep 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 분기에 설정 됨) 은이 답변을 참조하십시오 .


여기에서 완전히 임의의 예 : node_modules이 성능 변경의 영향을받을 수 있습니다. 아마도.
Seth Battin

1

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

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


0

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

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


-13

체크 아웃의 새로운 클론으로 시작해보세요.

git clone myrepo mynewrepo

그런 다음 mynewrepo에서 git status를 수행하십시오.

또는 용감하다면 기존 계산대에서 쓰레기를 청소하십시오.

git clean -dfx

이렇게하면 git이 무시되거나 체크인되지 않은 파일 집합 (아마도 큰)을 스캔하지 않아도됩니다.


무시 된 파일을 모두 삭제하면 (git clean이하는 일) 도움이 될 것이라고 생각하지 않습니다. 이미 무시하고 있습니다. git clean을 실행하면 모든 구성 파일 등이 삭제 될 가능성이 큽니다.이 명령은 취소 할 수 없습니다. 재 복제 (필요한 경우 먼저 이전 저장소를 저장)는 git clean을 실행하는 것보다 훨씬 낫고 동일한 효과가 있습니다.
XP84

5
이 대답에 동의하지 않아야합니다. git clean -dfx를 실행하면 문제가 발생할 수 있습니다.
Marcel Valdez Orozco 2013 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.