用 git (github) 管理、同步和备份 emacs 配置的方式

想请教一下大家用 git 或者 github 来管理、备份或者多台机器之间同步 emacs 配置文件的方法。

我的主要问题是,除了 elpa 上的包以外,我的配置里还会有个别 github 上的,也就是从 github 上 clone 下来,这些里面包含了 .git 文件夹,这些文件夹我一般放在 ~/.emacs.d/lisp/ 下。我尝试了把在 .emacs.d 全部加入 git 管理,然后上传到 github 上,发现带有 .git 文件夹的这些 clone 下来的 package 全部都没有上传。查了一下应该是需要 add submodule

我尝试着用 sourcetree add submodule 的选项那些带有 .git 的子文件加入了整体的 .emacs.d git 项目,进一步 push 到 github 上之后,发现虽然有了文件夹的名字,但是点击不了。

所以这一块我想请教一下大家一般是怎么处理的呢?

我对 git/github 的团队协作不是很熟悉,一般 clone 下来的包如果有一些在我的平台上遇到问题,有时会通过配置文件中 override 的方式规避,实在需要修改的,就在本地改了,比较少去提合并。不知道这块大家有没有什么建议。谢谢!

你用什么emacs,如果spacemacs和doom都有自己的另外的用户目录,配置放用户目录(而不是.emacs.d),一并上传到github,github的包用straight和use-package管理。

我没有用 spacemacs 或 doom,就是自己攒的配置,主要在 ~/.emacs.d/elpa 中放 melpa 的包,在 ~/.emacs.d/lisp/ 里面放自己的配置代码以及其它 github 上 clone 下来的包

那就是 github 的包不上传到自己的仓库了是么?

这样的话同步到新电脑上之后,就需要自动用 straight 和 use-package 来拉取最新的包代码了。我主要是希望能够把配置固定下来,因为有时候一些包升级后可能会有兼容性问题,又需要花时间调。。。

可以用straight指定版本,或者用melpa-stable之类的,没事不升级就行。个人认为没必要上传elpa包,小文件太多。真要使用的话就用submodule。

哦哦,谢谢,那可能是我目前的使用习惯问题,我没有用 straight,都是直接 git clone 下来的

发现用 github 来管理和备份 emacs 配置的一个问题,因为 git clone 后,文件的修改时间变成了 clone 的时间,而非真正的修改时间,那么由于文件时间改变了,会导致 emacs 28 的 native-comp 重新编译。

可能主要问题也是出在我把 elpa 的包上传了吧,那么 elpa 里面的 el 文件的修改日期都会受到 clone 的影响。

用同步盘则没有这个问题。

submodule 保持各仓库独立就行了, clone/push都可以用 recursive

如果是别人的包,用straight下载就好,可以随时删除重来,你只要管理straight配置就行。

自己的包或者你想管理的包经常修改或者更新的用submodules包含在你的配置里面,use-package加载本地包。

嗯嗯,谢谢,是我对这个理解的不深,我加 submodule 时 url 写成本地的路径了

嗯嗯,了解了,谢谢。

看来用 submodules 还是正规做法,我本来还想把那些子目录的 .git 都删掉,再当作常规文件夹加到整体的 git 里 :joy:

你这是啥工具啊, 不应该用magit么

Sourcetree,听说 magit 在 windows 比较卡,一直没敢用 :joy:

大佬你的centaur emacs里面没有straight啊,是自己偷偷在custom-post里面用的吗 :eyes:

我没有用straight,自己在custom-post.el 中使用过,更简单的是在~/.emacs.d/site-lisp 下clone。 我只会用github管理配置,其他都自动获取。因为需要开发包很多时候我都使用最新版。如果要固定版本,最简单的做法就是Git管理配置,网盘同步elpa。git submodule/straight 都挺慢,占用空间也不小。优点是灵活。

1 个赞

我也准备用网盘了,但是 OneDrive 不支持任意文件夹同步,折腾了一下 OneDrive 可以用 mklink 文件链接的形式实现 ~/.emacs.d/ 的同步,但是只能在一台电脑上做 mklink 设置,第二台电脑上做一样的设置就显示文件夹已存在无法创建链接了。

这样的话可选的只有坚果云了。。

第二台以后的电脑反向做mklink不就好了 :thinking:

1 个赞

牛啊,居然真的可以

就是第二台电脑上 emacs.d 是符号链接了,不知道是否影响后续使用。。

image

不建议所有配置都放进网盘,配置变更没有记录出问题就麻烦了。elpa同步就足够了。另外,elpa放入放网盘,所有电脑都用link链接到 ~/.emacs.d/elpa,这样最方便。

1 个赞

哦哦,懂了,意思就是 elpa 放入网盘,~/.emacs.d/elpa 是一个链接指向网盘吧?