多谢分享,这个很有用。
同时,再继续体验一下 Borg,弄一个常用的最小配置,其实平时好多包都用不到😓
多谢分享,这个很有用。
同时,再继续体验一下 Borg,弄一个常用的最小配置,其实平时好多包都用不到😓
我好想没咋用过这个函数,包括和magit的整合,都太麻烦了我觉得。
submodule 加一次就行了,我都是直接 submodule add 添加的,基本不在emacs里面使用borg,
在命令行添加,删除,编译submodule.
我好像189个包,启动2s多,启动时间对我无所谓的。
我昨晚手动 borg-clone 一个个加了,反正就弄一次。
升级子模块知道是对应哪个命令吗?文档好像没看到。
包括和magit的整合,都太麻烦了我觉得。
把magit 整的很慢,Mac 上也是。
慢是因为要把 submodule的 section也要插入进去:
(magit-add-section-hook 'magit-status-sections-hook
'magit-insert-modules
'magit-insert-stashes
'append))
我的做法是init.el只保留一个模板,平时几乎不动,只有包改变时需要在此目录下打开magit。转而将其他配置也搞成一个包,放github上,这样在这个目录下用magit还是很快的,跟平时没区别。
我的240个包,安了杀毒软件,在.emacs.d目录下调用 magit-status
,竟然要40多秒
我现在将 Magit 的配置改成下面这样,只是 commit 的时候有点延迟 1s 左右(windows 系统下),你的 40s 有点夸张啊。
;; Add modules in magit status buffer:
(magit-add-section-hook 'magit-status-sections-hook
'magit-insert-modules
'magit-insert-unpulled-from-upstream)
默认模板项目是会编译 init.el 到 init.elc,会不会是这个造成比较慢的。因为这样每次修改 init.el 文件都会触发 auto-compile?
我在文件末尾加入了这个变量:
;; no-byte-compile: t
升级子模块, borg应该是希望你用magit-submodule-update吧? 我不用magit管理borg,无论你怎么优化,超过几十个包他就是慢,优化没有意义。
我设定了一个阈值,超过20个子模块,diff的时候就自动排除,否则的话stage一个变动都要3s。
优化magit-status diff with submodules
;; HACK ignore submodules in magit-status when there is too many submodules.
(defvar magit-status-submodule-max 20
"Maximum number of submodules that will be not ignored in `magit-status'.")
(defun ad/ignore-submodules-more-than-max (orig-fn &rest args)
(let ((default-directory (magit-toplevel)))
(if (< magit-status-submodule-max (length (magit-list-module-paths)))
;; SEE https://emacs.stackexchange.com/a/57594/35676
(cl-letf (((get 'magit-status-mode 'magit-diff-default-arguments)
(cl-pushnew
"--ignore-submodules=all"
(get 'magit-status-mode 'magit-diff-default-arguments))))
(apply orig-fn args))
(apply orig-fn args))))
(advice-add 'magit-diff--get-value :around #'ad/ignore-submodules-more-than-max)
我说的直白一点,现阶段使用magit-submodule就是在找罪受,命令行包装一下命令感觉更好。
也不全是插入submodule的锅,即便你不插入,magit-diff需要检查包是否变动,依然很慢。
即便你真的要插入 module,我也建议你设置一下:
隐藏module-overview加快magit-status加载速度
;; disable `magit-insert-modules-overview'
(setq magit-module-sections-hook
'(magit-insert-modules-unpulled-from-upstream
magit-insert-modules-unpulled-from-pushremote
magit-insert-modules-unpushed-to-upstream
magit-insert-modules-unpushed-to-pushremote))
;; add module in `magit-status'
(magit-add-section-hook 'magit-status-sections-hook
'magit-insert-modules
'magit-insert-untracked-files)
)
遇到一个问题:
borg-clone 没法克隆 undo-tree
这个包,大家有遇到过吗?
Cloning into 'lib/undo-tree'...
ssh_askpass: exec(/usr/lib/ssh/ssh-askpass): No such file or directory
Host key verification failed.
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
你这不是提醒是ssh的问题嘛
为什么其他的包都没问题,就这个包要走 ssh-askpass,undo-tree 不是也在github 仓库上吗?
我不太清楚,我不用undo-tree。。我用的是undohist+vundo
谢谢,好像快了一些。我看了下CPU,慢的锅应该是360,magit-status执行时360的进程也在执行。
全部迁移到 Borg 了,启动速度还是很快的,1.2s 左右,和 package.el 差不多。
开始不熟悉, borg-clone
再 borg-assimilate
, 再 borg-build
。
其实,先 epkg-describe-package
查看包的依赖关系,然后只要 borg-assimilate
就可以安装包了,它会自动 clone 并 build。装好再加配置并commit。
borg-clone 是给只想克隆,不想编译用的。 borg-build
是给 borg-assimilate
出错,想重新编译用的。
不需要的包用 borg-remove
移除。
总的来说,就是自己管理依赖,手动安装。
剩下的问题:
这个问题已经解决,原因是我从来没用 ssh 下载过 gitlab 仓库,所以 ssh 的 ~/.ssh/known_hosts
没有加 gitlab.com。 只要在终端里下载一次 gitlab 的项目就 OK了。然后 Borg 就可以正常 Clone
我是直接用https,没用ssh。配置下 borg-rewrite-urls-alist:
(setq borg-rewrite-urls-alist
'(("[email protected]:" . "https://github.com/")
("[email protected]:" . "https://gitlab.com/")))
以前我的Git 都是用 https,每次都要提示我输入密码。加上前段时间(好像是半年前)Github 提示不允许用 https+普通密码 给自己仓库推送commit,于是就弄了 ssh。
用 HTTPS 是怎么做到不用手输密码的? 用GPG 吗?
在github的 1. Settings → Developer settings,创建一个 Personal access tokens。然后push url的格式:https://user:[email protected]/xxx.git
国内的gitee也是可以创建这种https token的,gitlab就没试过了。
多谢,原来 Github 是要用户用这个 Personal access tokens, 之前只用过在 CI 上用。
再请教一个问题,对基于 Borg 的 .emacs.d ,A 机器和B 机器都已经同步了 Github 上的仓库,当 A 机器添加了更多的包并推送到 Github 后,B 机器拉取更新。接下正确的方式应该是执行什么命令让本B机器的本地子模块进行更新?
我试过在B机器上执行 make bootstrap
和 make all
,以及 git submodule update --init --recursive
都不对。
在 B 机器上全新安装倒是没问题的,但是那样太慢了。
git submodule update --init lib/reponame
我记得是这样,在magit中也可以操作的,不过我的实在太慢。这个命令拉到包以后,运行一次 borg-build