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.