核心用法
git-changelog 是一个轻量级 Bash 脚本工具,用于从 Git 仓库的提交历史中生成结构化的变更日志。无需额外依赖,仅依赖系统自带的 Git 和 Bash 环境。
主要功能
- 多格式输出:支持 Markdown(默认)、纯文本、JSON 三种格式,满足不同场景需求
- 灵活的时间范围:可指定起始日期(
--since)、结束日期(--until),或自动从上次标签生成 - 智能检测:自动识别最近的 Git 标签作为起始点,排除合并提交以保持输出简洁
- 约定式提交解析:自动提取
feat、fix、docs等 conventional commit 类型,JSON 输出包含完整的提交对象(hash、subject、author、date、type) - 分组展示:
--group模式可按提交类型分组(需 Bash 4+)
显著优点
1. 零依赖:纯 Bash 实现,无需安装额外工具或语言运行时
2. 即拿即用:单脚本文件,直接复制到 scripts/ 目录即可运行
3. CI/CD 友好:JSON 格式便于自动化流程消费,纯文本适合邮件通知
4. 向后兼容:自动降级处理(如检测不到标签则使用最近30天)
潜在缺点与局限性
- Bash 版本限制:
--group功能需要 Bash 4+,macOS 默认 Bash 3.2 需手动升级 - 无模板定制:输出格式固定,不支持自定义模板或渲染引擎
- 提交信息依赖:输出质量完全取决于团队是否遵循约定式提交规范
- 无高级过滤:不支持按作者、文件路径、代码变更量等维度筛选
适合人群
- 中小型开发团队需要快速生成发布说明
- 个人开发者维护开源项目的 CHANGELOG.md
- 构建自动化流水线(CI/CD)中的版本报告环节
- 希望避免引入重量级工具(如
conventional-changelogNode 生态)的场景
常规风险
- 脚本注入风险:若仓库路径或日期参数来自外部输入,需确保对特殊字符进行转义
- 权限问题:脚本需要读取
.git目录,在受限环境(如某些 CI 容器)可能执行失败 - 跨平台差异:Bash 4+ 依赖和日期解析行为在不同操作系统上可能有细微差异