10

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

4

5 回答 5

10

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

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

于 2013-06-03T17:47:32.503 回答
5

如果只添加 git.exe 路径,magit 并没有加速太多。

最好的方法是使用以下配置添加所有与 git 相关的命令路径 [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")))))

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

在我的环境(Windows 7 x64)中,magit-status 只需要大约 2 秒而不是 1~2 分钟。

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

于 2013-09-06T07:16:16.197 回答
4

它很慢,因为它的编写方式和 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 可执行文件可以使它可用?

于 2015-05-07T16:48:36.600 回答
2

更改 magit-git-executable 对我没有任何作用。我最终使用了 WSL,在它上面安装了 X 并在 Windows 上安装了一个瘦 XServer。它实际上工作得非常非常好,并且比“原生”Windows10、Cygwin 和 MingSYS 快得多

一些好的分步说明在这里: https ://github.com/hubisan/emacs-wsl

于 2020-02-20T21:42:51.020 回答
0

正如 MikeHoss 所指出的,对于 magit,WSL Emacs 是更好的选择。
检查我所做的一些比较,原生Emacs Windows 与 WSL Emacs

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

于 2020-05-20T13:28:54.793 回答