写了一段更新Submodule的脚本

现在用submodule管理package,但是submodule的更新有点太复杂,所以hack了一段脚本,解决了两个痛点:

  1. 网络状况不好,连接github的时候有时候会被reset,然后就要每个package重新跑一遍。
  2. 有些package的主线分支是master,有些是main。

https://gist.github.com/ruibinx/379b2d4fb8687ebf54142792204d343a

抛砖引玉,期待大家更好的方法。

3赞

为什么不要magit? 集成挺好用的

可以分享一下你的用法吗?我用magit add/remove submodule,但是update的时候经常会出现Couldn’t find remote ref refs/heads/master

我也只是很基本的用法,你说的问题是因为网络问题吗?如果是的话这真不好解决 :thinking: 我倒没遇到过这错误

不完全是网络问题。我理解上边出错的原因是:git没有存submodule track的branch信息,只存了commit-id,有些项目主分支是main,有些是master,所以批量跑的时候直接pull master也不行

我 Makefile 里面有三个命令更新 submodule,感觉不需要什么脚本吧


# 更新到 remote 最新 commit
update:
	git submodule update --init --recursive --remote

# 初始化下载,更新到 .gitmodules 中指定的 commit
init:
	git submodule update --init

# 修改 .gitmodules 后
sync:
	git submodule sync

我执行update的时候,有些package执行不太正常,例如:

Unable to find current origin/master revision in submodule path ‘packages/marginalia’

也没找到特别好的方法解决。另外还会把submodule的submodule也update,导致submodule的状态变为dirty

用 straight 会不会更好, 还顺便解决了依赖的问题.

找时间试一试

borg 也是 submodule 管理。我的使用场景是经常在两台机器之间手动同步配置及 package,直接把配置也作为一个 package,这样 init.el就是一个模板,基本不会变。

看报措是 remote 那里找不到 master 分支了,应该是被 rename 了?如果是,你 cd 进去,手动切一下分支,pull 下应该就好了,后面也不会再有。

把 update 命令中的 --recursive 去掉即可。