Magit은 파일을 커밋하는 데 너무 많은 시간이 걸립니다. 다른 작업에 절대적으로 비례합니다 - 몇 분이 걸릴 수 있습니다. 그렇지 않으면 쉘에서 포기하고 포기합니다. 그것에 어떤 이유가 있습니까? 어떻게 디버깅 할 수 있습니까? 흥미롭게도, 내가 *magit-process*
버퍼 (git 프로세스와 상호 작용해야하는 버퍼)를 죽인 다음 작업을 계속하면 모든 것이 작동합니다. 그러나 버퍼에는 오류 메시지가 없으며 명령 자체 만 있습니다.Windows에서 커밋 할 때 Magit이 매우 느립니다.
답변
M-X 사용자 정의 - var에 RET magit - 자식 실행 RET
변경하여 자식 실행 파일의 전체 경로 값. 예를 들어 광산을 c : /cygwin/bin/git.exe로 설정합니다. 내가 그것을하기 전에, magit는 고통스럽게 느렸다. .. 지금 그것은 단지 조금 천천히.
이것은 실제로 OS X에서도 나를 도왔다. 허브 명령으로 git를 래핑하는 oh-my-zsh 번들에서 zsh 및 zsh의 github 플러그인을 사용하고 있었다. – ustun
magit는 git.exe 경로 만 추가하면 속도가 크게 향상되지 않았습니다.
가장 좋은 방법은 구성 [1]
(if (eq system-type 'windows-nt)
(progn
(setq exec-path (add-to-list 'exec-path "C:/Program Files (x86)/Git/bin"))
(setenv "PATH" (concat "C:\\Program Files (x86)\\Git\\bin;" (getenv "PATH")))))
간부 경로가 Magit 중요하다에서는 setenv이 eshell에서 사용되는 다음의 모든 자식 관련된 명령 경로를 추가한다.
내 환경 (Windows 7 x64)에서 magit-status는 1 ~ 2 분이 아니라 2 초 정도 소요됩니다.
[1] https://lists.gnu.org/archive/html/emacs-devel/2012-05/msg00269.html
그것은 때문에이 쓰여 및 Windows 프로세스를 시작하는 유닉스 시스템보다 약간 느리게되는 방법의 조합으로 느린.
Magit은 상태 페이지를 표시하는 동기 프로세스에 크게 의존합니다. (이 이미 최적화되어, 나는 최악의 중복 호출을 제거했습니다 주) : 저는 여기에 하나의 stage-item
실행으로 구성 일부 출력의
magit-cmd-output git.exe (--no-pager symbolic-ref -q HEAD) (0 1 153000 0) {refs/heads/master}
magit-cmd-output git.exe (--no-pager config branch.master.remote) (0 1 149000 0) {}
magit-cmd-output git.exe (--no-pager config --bool branch.master.rebase) (0 1 155000 0) {}
magit-cmd-output git.exe (--no-pager config branch.master.merge) (0 1 155000 0) {}
magit-cmd-output git.exe (--no-pager log --max-count=1 --abbrev-commit --abbrev=7 --pretty=oneline) (0 1 168000 0) {}
magit-cmd-output git.exe (--no-pager stash list) (0 2 831000 0) {}
magit-cmd-output git.exe (--no-pager config status.showUntrackedFiles) (0 1 177000 0) {}
magit-cmd-output git.exe (--no-pager ls-files --others -t --exclude-standard) (0 1 195000 0) {? thehangover.jpg? tugofwar.jpg? tugogwar.jpg? typists.jpg}
magit-cmd-output git.exe (--no-pager diff-files) (0 1 158000 0) {}
magit-cmd-output git.exe (--no-pager mktree) (0 1 157000 0) {4b825dc642cb6eb9a060e54bf8d69288fbee4904}
magit-cmd-output git.exe (--no-pager diff-index --cached 4b825dc642cb6eb9a060e54bf8d69288fbee4904) (0 1 156000 0) {:000000
은.
magit이 각각의 인수 세트에 대해 git를 호출하고 있으며 1 초가 걸리며 많은 마이크로 초가 걸리는 것을 볼 수 있습니다. 최악의 경우 (stash list
) 거의 3 초. 그것은 모두 합쳐져 매우 느리게 만듭니다.
많은 호출이 캐시 될 수 있습니다. 그러나 어려운 일은 언제 그들을 uncache 할 것입니다. 그렇게하려면 잘하기 위해 많은 변화가 필요합니다.
번식 방식을 사용하면 더 빨리 처리 할 수 있습니까? 아마도. 지금 당장 그런 식으로 생각할 수는 없어요. 아마도 특수 git 실행 파일을 사용 가능하게 만들 수 있습니까?
이 전화는 어떻게 작성 했습니까? Windows에서 magit으로 거의 모든 작업을 수행하는 데 30 초를 넘는 시간이 걸리고 있습니다. 왜 그렇게 느린지보고 싶습니다. –
나는 시간이 있다고 생각 하겠지만, 열려있는 버퍼의 수에 잠재적으로 곱해질 수도 있습니다. 여러 번 (커밋 할 때 포함) magit이 열려있는 모든 버퍼에서 처리를 수행합니다. 이것에 관한 공개 문제). magit이 다른 방법보다 빠를 때조차도 매우 두드러 질 수 있습니다. 새로운 Emacs 인스턴스에서 최소한의 버퍼를 열어 테스트를 반복하는 것이 좋을지도 모른다. – phils
분에 대해서는 잘 모르지만 Windows에서는 magit에 문제가있는 것 같습니다. 그것은 비동기와 관련이있는 것처럼 보입니다. 프로파일을 작성했는데 이상한 결과가 나타납니다. 내가 고칠 때까지 계속 볼 것입니다. –
방금 프로필을 작성했습니다 ... magit이 git *에서 많은 프로세스 파일 (동기식)을 많이 사용하고있는 것으로 보입니다. 그것은 아주 느리게 만듭니다. 특히 파일의 단일 은닉을 위해 rev-parse를 5 번 호출합니다. 과도한 것 같습니다. –