现在用submodule管理package,但是submodule的更新有点太复杂,所以hack了一段脚本,解决了两个痛点:
- 网络状况不好,连接github的时候有时候会被reset,然后就要每个package重新跑一遍。
- 有些package的主线分支是master,有些是main。
抛砖引玉,期待大家更好的方法。
现在用submodule管理package,但是submodule的更新有点太复杂,所以hack了一段脚本,解决了两个痛点:
抛砖引玉,期待大家更好的方法。
为什么不要magit? 集成挺好用的
可以分享一下你的用法吗?我用magit add/remove submodule,但是update的时候经常会出现Couldn’t find remote ref refs/heads/master
我也只是很基本的用法,你说的问题是因为网络问题吗?如果是的话这真不好解决 我倒没遇到过这错误
不完全是网络问题。我理解上边出错的原因是: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 会不会更好, 还顺便解决了依赖的问题.
找时间试一试
看报措是 remote 那里找不到 master 分支了,应该是被 rename 了?如果是,你 cd 进去,手动切一下分支,pull 下应该就好了,后面也不会再有。
把 update 命令中的 --recursive
去掉即可。
现在 git 仓库有的是 master 作为主分支,有的是 main 作为主分支。有没有 git 命令,可以自动切换所有字模块的当前分支为 master 或者 main
我之前是使用
git submodule foreach git checkout master
但是遇到是 main 的仓库就没法执行了。
我记得oh-my-zsh里面有函数可以用, 大概类似于
git_current_branch () {
local ref
ref=$(command git symbolic-ref --quiet HEAD 2> /dev/null)
local ret=$?
if [[ $ret != 0 ]]
then
[[ $ret == 128 ]] && return
ref=$(command git rev-parse --short HEAD 2> /dev/null) || return
fi
echo ${ref#refs/heads/}
}
git submodule foreach git checkout $(git_current_branch)
用 git submodule update --remote --jobs $(nproc)
好像也可以,但是发生错误容易中断。
多谢,回头试试看。
我换成straight.el了,确实更好用
我目前使用 Borg,总体来说还可以。就是 magit 比较慢。
不过用了 submodule 管理以后,也没那么积极去更新了 。之前用 package.el 的时候天天滚,不滚不舒服。
简单粗暴的做法,再试一次 main 分支 ;
优雅点就先看下远程有哪个分支,再切过去。
再尝试 main 分支,会卡在 master 分支,一样不过去。
还好我的也就几个包是 main 分支的。就像你说的第二种方向手动切了,以后也就不动了。
原来全世界都是 master 分支作为主分支,非要搞个 main 分支作为主分支,真是闲的。