如何编写仓库根目录运行脚本,替代onsub扩展更新所有子仓库
替代Onsub扩展的Mercurial子仓库更新脚本
原来依赖的Onsub扩展确实在2017年就停止维护了,不过咱们完全可以用Mercurial自带的子仓库命令来实现同样的效果,而且不需要硬编码任何子仓库列表,直接在根仓库运行就行。
给你两个可行的方案,选哪个都可以:
方案一:用hg subrepo foreach(最简洁)
这个命令是Mercurial官方提供的子仓库遍历工具,会自动读取根目录的.hgsub文件来识别所有子仓库,完美替代Onsub的功能。脚本如下:
# 先更新主仓库并执行变基,和你原来的逻辑一致 hg pull --rebase # 遍历所有子仓库,依次执行pull--update和update hg subrepo foreach "hg pull --update && hg update"
方案二:用hg repos手动循环(更灵活)
如果需要额外的日志输出或者自定义逻辑,可以用hg repos -S获取所有子仓库的相对路径,再逐个处理:
hg pull --rebase # 遍历每个子仓库路径 for repo in $(hg repos -S); do echo "正在更新子仓库: $repo" # 进入子仓库目录执行命令,用子shell避免影响当前目录 (cd "$repo" && hg pull --update && hg update) done
两种方案都不需要你手动维护子仓库列表,完全和原来的Onsub脚本效果一致,而且是Mercurial原生支持的,不用担心扩展失效的问题。
内容的提问来源于stack exchange,提问作者Violet Giraffe
相关产品推荐
相关产品推荐

