如何在含子模块的Gitlab项目中便捷生成指定时间段的发布说明?
带Submodule的GitLab项目指定时间段发布说明生成方案
可以实现,推荐两种适配不同需求的方案,均可覆盖子仓库变更统计、时间范围筛选、合并请求/变更列表提取、按bundle聚合的需求:
方案1:GitLab内置发布功能(无代码快速实现)
适合没有定制化格式要求的场景,操作步骤如下:
- 提前在主仓库和所有子仓库的「设置-仓库-标签」配置页,开启提交自动关联合并请求功能
- 为你需要统计的时间段首尾提交分别打临时标签(如果已有对应版本标签可跳过这一步)
- 进入主仓库的「部署-发布」页面,点击「新建发布」,选择刚才设置的起止标签
- 勾选「包含子模块提交」选项,GitLab会自动遍历所有子仓库对应时间区间的提交、关联的合并请求,生成基础发布内容
- 导出内容后按你定义的bundle维度做简单聚合整理即可
方案2:自定义脚本生成(适配复杂格式/自动化需求)
适合需要自动按bundle统计、要集成到CI流程的场景,步骤如下:
- 先拉取所有子仓库的路径映射,执行命令:
git submodule foreach --recursive 'echo $name $path' > submodule_map.txt - 分别拉取主仓库和所有子仓库指定时间范围内的提交记录,示例命令:
git log --after="2024-01-01" --before="2024-06-30" --pretty=format:"%h %s %an" - 用GitLab官方CLI工具
glab批量匹配提交对应的合并请求,无需手动封装API,示例命令:glab mr list --state merged --updated-after 2024-01-01 --updated-before 2024-06-30 --json title,web_url,author,sha - 按你预设的bundle规则(如果bundle和子仓库一一对应可直接按子仓库路径分组)对提交、合并请求做聚合,直接输出格式化的发布说明即可
注意事项
- 运行脚本前要确保你的账号有所有子仓库的读取权限,否则会出现拉取不到变更的问题
- 如果需要集成到CI流水线,可以把上述步骤封装成CI Job,每次发版自动生成发布说明
内容的提问来源于stack exchange,提问作者Christophe
相关产品推荐
相关产品推荐

