求教一个详细的git submodule管理插件的步骤说明

看了一下Borg的文档,这个方案留待后面直接用git submodule用着不顺利的时候再试试

可以看看我目前的方法,把所有的包当作一个 submodule,绕开依赖管理。

项目地址更改为

这个方法看着是比较新颖,没这么尝试过

Borg 严重依赖 magit,在Liunx 上体验应该会很好。但在Windows 下 magit 太慢。楼主如果主力系统是 Linux的话,推荐用 Borg,否则不建议。

我是主力用 macOS,其次是 Windows,配置主要在 macOS上更新。

我是属于,Windows和Linux都用,五五开那种,magit在Windows下的性能不行这个我还是清楚的,之前还没开始重新组织配置的时候,也是听的陈斌先生的建议,用的vc

来个文不对题(不使用git submodule)的回复:

可以看看我写的一个包:新包:pie - package installer for Emacs

不依赖package.el,支持git clone仓库或者http下载单个文件,支持定制化构建包。不过我不用windows,不确定在win上会不会有啥问题。

依赖Magit吗?

不依赖magit,依赖vc(对于git仓库,一开始用的是vc,后来改成直接使用git这个命令行工具,对于hg之类的其他类型仓库,依赖vc,不过其他仓库我没测过。。。)

出现一个新问题:我按照use-package的说明,将use-apckage通过git submodule add到我设定的插件目录,在使用git submodule add另一个插件(如markdown-mode),用use-package加载的时候,我的插件路径:load-path是对的,但是还是在打开Emacs的时候,给我直接从elpa上查找markdown-mode,而不是直接使用我本地的文件,这样的问题怎么解决?

我使用的是 use-package+quelpa+git submodule 管理我自己写的一些package

首先所有的子模块我都放在 .emacs.d/site-lisp 目录下,所以需要添加 site-lisp 路径到 load-path https://github.com/honmaple/maple-emacs/blob/master/core/core.el#L126

然后是使用 use-package+quelpa, 其中的 quelpa 关键词是我自定义的 https://github.com/honmaple/maple-emacs/blob/master/core/core-use-package.el#L197

其中关键的地方就在于会优先查找本地的package,如果没有才会下载远程的包

(defun use-package-handler/:quelpa (name _keyword args rest state)
  "NAME KEYWORD ARGS REST STATE."
  (use-package-concat
   `((unless (or (locate-library ,(format "%s" name))
                 (package-installed-p ',(pcase (car args)
                                          ((pred listp)   (caar args))
                                          ((pred symbolp) (car args)))))
       (apply 'quelpa ',args)))
   (use-package-process-keywords name rest state)))

如果我在其它地方使用emacs(非我本机),可以选择是否克隆子模块,不克隆的话会使用quelpa下载package。

如果不想使用子模块,而是一个独立的本地包,和emacs配置一起管理,同样可以放到site-lisp目录下,只需要添加:ensure nil即可,具体这些都可以在我的配置里找到

https://github.com/honmaple/maple-emacs

我用magit加submodule,按提示就搞定了,什么都没学的

前不久换成了straight,现在是elpa+少量straight,straight相比submodule好处是原样给你目录,可以直接git/magit操作。不过默认只认elisp文件,找了好久怎么把lsp-bridge的py文件放进去。

昨天试了一天把use-package用上,失败了,还是暂时考虑直接require了

use-package没什么坑,只要注意 always-ensure always-defer 和 demand 应该就可以了。搞好之后已经require了的不用动,加新插件再用use-package就行

我是当时面对的问题是这样,use-package的load-path读取的路径,我按照插件的绝对路径写的,但是似乎它还是给我搞的是相对路径,这就是我不得不暂时放弃使用use-package的原因

use-package 里的 load-path 是配合和 user-emacs-directory 展开的,有什么理由一定要用绝对路径咧?

3.7 Setting a custom ‘load-path’
================================

If a package resides in some directory that is not in your ‘load-path’,
use the ‘:load-path’ keyword to add it.  It takes a symbol, a function,
a string or a list of strings.  If the path is relative, it is expanded
within ‘user-emacs-directory’.

在init.el重新定义user-emacs-directory, 这个方法不错,试试

更新:在这几天组织配置的过程下,目前采取的方案是以git submodule为主,一些包在github没有找到的直接去elpa和melpa下载直接package-install-from-buffer,后面还要想办法用回use-package,因为确实还是方便

其实用 git submodules 管理给我的最大感觉就是 自由

一个包什么时候加载,如何加载,加载时干什么,这些都是完全由你自己控制的,不用再去为 use-package 的各种用法操心,只需要掌握最基础的 elisp 语法就行了

(纯属个人观点,请理性讨论)

1 个赞

主要也是因为之前有人说use-package用着方便,这几天只不过是手写这些配置,use-package本身只是个宏,到时候也要展开执行

git submodule 和 use-package 并不矛盾,两者可以同时使用。