同样是用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 个赞
jixiuf
3
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 提出建議比較好吧. 
你可以用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 个赞
jixiuf
12
我现在已经弃用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,也还是太慢了