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