讨论一下 Borg

遇到一个问题: 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-cloneborg-assimilate, 再 borg-build

其实,先 epkg-describe-package 查看包的依赖关系,然后只要 borg-assimilate 就可以安装包了,它会自动 clone 并 build。装好再加配置并commit。

borg-clone 是给只想克隆,不想编译用的。 borg-build 是给 borg-assimilate 出错,想重新编译用的。

不需要的包用 borg-remove 移除。

总的来说,就是自己管理依赖,手动安装。

剩下的问题:

  1. 由于缺少 ssh-askpass 没发安装 undo-tree 和 git-timemachine (这个不能缺)
  2. 在 Mac 上 Magit commit 非常慢,比 Windows 还慢了,有待解决。 反而是 Windows 下是正常(跟以前一样慢 :sweat:
3 个赞

这个问题已经解决,原因是我从来没用 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 bootstrapmake all ,以及 git submodule update --init --recursive 都不对。

在 B 机器上全新安装倒是没问题的,但是那样太慢了。

git submodule update --init lib/reponame

我记得是这样,在magit中也可以操作的,不过我的实在太慢。这个命令拉到包以后,运行一次 borg-build

:+1:多谢 ,命令行操作其实也挺方便的,不一定都用 magit

这个和手动git submodule add相比有什么优势吗?

我使用下来觉得主要好处有以下几点:

  1. 通过 epkg 可以更加方便地查看包之间的依赖关系(这个包也可以单独使用)
  2. 更加方便地添加和删除包
  3. 更加方便编译包,生成 autoloads 文件,配合 use-package 实现懒加载,从而减少 Emacs 启动时间。Linux 和 Mac 可以控制在 1s 左右,Windows 就别想了。

才刚开始用,其他的好处还有待慢慢体验。

borg有点像半自动。需要自己考虑的:

  1. 包的依赖
  2. 具体配置

其他像生成 autoloads,byte-compile,make info,添加load-path都不用考虑。borg-assimilate下载后编译可以发现少的依赖。还可以用submodule.DRONE.variable作好些微调。

比如最近看到一个包 org-appear好玩,直接 M-x borg-assimilate ,它就自动下载、编译,也没报错。看看它的readme,只有 (add-hook 'org-mode-hook 'org-appear-mode) 一行必须,就直接加在原来的 org配置下。就这么简单,好些都不用考虑。删除包只要 borg-remove

需要微调的:

  1. 包的目录不符合borg约定的:在目录、在lisp目录下、在elisp目录下。如 all-the-icons,就在 .gitmodules文件中用 load-path调整:
[submodule "all-the-icons"]
	path = lib/all-the-icons
	url = https://github.com/domtronn/all-the-icons.el.git
	load-path = .
	load-path = data
  1. 不想编译的。如没用 helm,则在 org-ref中:
[submodule "org-ref"]
	path = lib/org-ref
	url = https://github.com/jkitchin/org-ref.git
	no-byte-compile = org-ref-helm-bibtex.el
	no-byte-compile = org-ref-helm-cite.el
	no-byte-compile = org-ref-helm.el
  1. 要使用自己的fork,直接在 .gitmodules下修改url。

暂时遇到的主要是这几种。我向作者提的像doom一样生成一个大的 autoloads.el,这样包装好后就可以不依赖 git, 对于windows用户也可以提高点速度。对于我要离线同步配置来说,真是太方便了。不用其他工具diff了。

1 个赞

请问下像 flyspell-correct 这个包,提供了很多功能,但我只用到默认的那个,根本不想安装他所有的依赖。应该怎么处理才能使得 ivy 和 helm 不参与编译并加入autoload?

目前我是强行编译,虽然有报错,但能正常使用。

这个包的依赖如下:

 flyspell-correct 

[-] Dependencies:
 |-[+] avy-menu  github  avy-menu
 |-[+] buttercup  github  buttercup
 |-[+] emacs  builtin  subr-x
 |-[+] flyspell  builtin  flyspell
 |-[+] helm  github  helm
 |-[+] ido  builtin  ido
 |-[+] ivy  github  ivy
 `-[+] popup  github  popup

前面这个就行。把不要的列在这个里面

1 个赞

请教一下 Borg 的 .gitsubmodule 中能够对不同平台设定不同的编译参数吗? 比如我要安装 mu4e 的时候,只想在 macOS 上定义特殊的编译步骤,在 Linux 平台用不同的参数。

[submodule "mu4e"]
        path = lib/mu4e
        url = [email protected]:djcb/mu.git
        build-step = test -e ./configure || autoreconf -i
        build-step = ./configure
        build-step = make -C mu4e > /dev/null
        build-step = borg-update-autoloads
        load-path = mu4e

执行 make all 进行对 .emacs.d 进行 native compile 时, PC-Doctor Module 吃了 50G 内存,有人遇到这个问题吗?是否是正常情况?

/.emacs.d/etc/borg/config.el 中加入了下面的设置:

(when (native-comp-available-p)
  (setq borg-compile-function #'native-compile))