windows上magit速度提升

同样是用procmon分析,可以发现几个现象,
1 即便设置了 (setq magit-git-executable "C:\\Program Files\\Git\\cmd\\git") , emacs仍然会多次遍历PATH去找git程序
2 我只使用magit, 但是emacs底层会去多次遍历PATH找hg 和 svn程序

解决方法很简单, 创建一个目录 c:\path .
然后在里面放个hello world程序, 命名为 svn.exe hg.exe. 然后mklink git.exe 真实git的路径 再把c:\path加到环境变量开头(如果需要使用svn和hg程序,同样可以用mklink创建svn hg的软链接)

明显能感觉到magit的操作变快了

1 个赞

大佬威武!!!

vc-handled-backends '(Git ) ;default '(RCS CVS SVN SCCS Bzr Git Hg Mtn Arch)

这是 emacs VC的功能吧, 这个值可以调整。

1 个赞

如何测试有多少提升?

我通过 (setopt vc-handled-backends '(Git )) 设置了,但没有明显提升。

反复用新文件测了下貌似确实没啥变化, 主要的提升还是来自于另一个帖子的load-path缓存 启用后从1.8秒下降到1.4秒

(let ((time (current-time)))
  (find-file "C:\\Users\\Administrator\\temp\\testgit2\\2.txt")
  (magit-status)
  (message "%.06f" (float-time (time-since time))))

這個聽起來哪裡怪怪的? 如果真的有這情況, 或許向 magit 提出建議比較好吧. :thinking:

你可以用procmon看看,我在另外一个帖子里面有截图
procmon是在驱动里面监控各种事件很准确

我估计是因为他多次调用了 executable-find

有没有大佬为windows优化一下magit(太慢了,用起来都有心理负担了)?可以不要用命令行来调用git,用一个常驻server,或者有git 的lib来调用 git的功能,这样应该会快很多吧。

使用另外那个帖子提到的代码有效果没? 我现在用magit, 操作卡顿感降低很多了

最近看到有大佬打算彻底解决 magit 慢的问题,和Maker的性能有关:

感觉这个解决不了 magit 在 windows 慢的问题。这个 PR 是解决 magit 渲染 UI 慢的问题,是对 linux/macOS 也有用的边缘情景下的优化。 magit 在 windows 慢是 IO 性能的问题。

1 个赞

我现在已经弃用magit大半年了 ,改用自带的VC了, 在原有的VC 基础上自行扩展了一些magit中比较常用的命令及UI, (基于 master 版本的,可能对emacs30支持的有问题)

如: 将 Unpushed/Unpulled/Recent 展示在vc-dir目录内,

配合which-key-mode后效果与magit差相仿佛,效果上 进vc-dir目录运行的git命令相对较少,自然性能会好一些,当然功能也相对少很多,但对我来说够用了。 目前常用的功能如:push/pull/fetch/stash/rebase -i/vcgit-am-apply-patches 已经支持了。

目前可以在 diff-mode中执行vc-next-action, 它会只将diff-mode中的hunk提交为一个commit(你可以临时编辑diff-mode的内容后再执行vc-next-action) ,可以勉强替换magit 的"仅提交选中区域的hunk"

一些常用的命令 如:

vc-push-default vcgit-push-tags vcgit-push-other

vcgit-rebase

vcgit-git-delete: delete tag or branche

vcgit-pull-default vcgit-fetch-tags

vcgit-rebase-i vcgit-continue/vcgit-skip/vcgit-abort

vcgit-am-apply-patches vcgit-apply-plain-patches

2 个赞

帖子太长了看了一下没抓到重点就没试了。不过即使提升到了 1.4 s,也还是太慢了

vc 倒是挺快的,以后多用用看

这个包可以让 magit 的速度快一点

1 个赞