在Windows上提交时,Magit非常慢

时间:2013-06-02 15:41:08

标签: emacs magit

Magit需要花费很长时间才能提交文件。绝对与任何其他任务不成比例 - 可能需要几分钟,否则我放弃并从shell提交它。有什么理由吗?我该怎么调试呢? 有趣的是,如果我杀死*magit-process*缓冲区(必须与git进程交互的缓冲区),然后继续执行任务,那么一切正常。但是缓冲区中没有错误消息,只有命令本身。

5 个答案:

答案 0 :(得分:7)

M-x customize-var RET magit-git-executable RET

将值更改为git可执行文件的完整路径。例如,我将我的设置为c:/cygwin/bin/git.exe。在我这样做之前,magit很慢......现在它只是有点慢。

答案 1 :(得分:5)

如果只添加git.exe路径,magit的速度不会很快。

最好的方法是使用以下配置[1]

添加所有与git相关的命令路径
(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")))))

exec-path对Magit很重要,esten使用setenv。

在我的环境(Windows 7 x64)中,magit-status仅花费大约2s而不是1~2分钟。

[1] https://lists.gnu.org/archive/html/emacs-devel/2012-05/msg00269.html

答案 2 :(得分:2)

由于它的编写方式和Windows比unix系统启动进程的速度稍慢,因此速度很慢。

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秒。这一切都加起来并使其变得非常慢。

很多调用可能都是缓存的。但困难的是何时解开它们。这需要对magit做出很多改变才能做好。

或者,有没有办法对它们进行批处理,以便它们更快?也许。现在不能想到这样的方式。也许一个特殊的git可执行文件可以使它可用?

答案 3 :(得分:2)

更改magit-git-executable对我没有任何帮助。我最终使用了WSL,在其上安装了X,并在Windows上安装了一个瘦XServer。它实际上确实非常有效,并且比“本地” Windows10,Cygwin和MingSYS快得多

此处提供了一些良好的分步说明: https://github.com/hubisan/emacs-wsl

答案 4 :(得分:0)

就像MikeHoss pointed一样,对于magit来说,WSL Emacs是更好的选择。
检查我进行的一些比较,本机 Emacs Windows vs WSL Emacs

https://emacs.stackexchange.com/a/58444/6957