git log --format 可输出结构化字段行(如%H|%aI|%s|%an|%d|%b),再经Python等解析为JSON数组;必需字段包括commit哈希、ISO时间、标题、作者名、ref名及body中的service/env等键值对。

用 git log --format 输出结构化 JSON 字段
git log 本身不直接输出 JSON,但可通过 --format 精确控制每条提交的字段内容,再配合 shell 工具(如 jq、awk 或 Python)组装为合法 JSON 数组。关键不是“生成完整 JSON”,而是产出**可稳定解析的结构化行格式**,为后续转 JSON 打下基础。
定义发布流必需的指纹字段
运维大屏关注的是“谁、何时、在哪、发了什么、影响哪些服务”,建议固定提取以下字段(全部单行、无换行、无引号污染):
- %H:完整 commit hash(唯一标识)
- %aI:作者时间(ISO 8601 格式,时区明确,便于时序对齐)
- %s:精简标题(避免 %B 引入换行和特殊字符)
- %an:作者姓名(非邮箱,更符合运维认知)
- %d:ref 名称(含 tag/branch,识别是否为发布点)
- %b 或自定义脚本提取 service=xxx, env=prod 类标记(建议在 commit message body 中约定键值对)
构建可管道化处理的格式模板
使用 --format="%H|%aI|%s|%an|%d|%b" 作为分隔符模板(竖线 | 避免与日志内容冲突),例如:
5a2f1c3|2024-04-15T14:22:08+08:00|feat(api): upgrade auth middleware|张三|(HEAD -> main, tag: v2.3.1)|service=auth,env=prod,rollback=none
该格式满足:
– 每行一条 commit
– 字段数固定、顺序一致
– 无嵌套、无换行、无双引号
– 可直接用 awk / cut / Python csv.reader 解析
实时注入大屏:从 git log 到 JSON 流的最小链路
在 CI/CD 流水线或定时采集脚本中执行:
- 运行 git log -n 50 --format="..." --since="24 hours ago" --no-merges(限制数量+时间窗+排除合并提交)
- 用 Python 脚本逐行 split("|"),清洗 %d 中的空格和括号,解析 %b 中的 key=value 对
- 构造字典并 json.dumps() 输出标准 JSON 对象数组
- 通过 HTTP POST 推送至大屏后端 API,或写入 Redis Stream / Kafka Topic 供前端 SSE 拉取
无需复杂工具链,核心在于 git log 格式可控、字段语义明确、解析逻辑轻量——这才是支撑高可用发布流指纹的关键底座。


















