如何在Git提交日志图形中添加自定义可执行程序的动态信息?
可行!用Git结合自定义脚本实现带动态信息的提交图
完全可以实现你要的效果,Git的--pretty=format参数支持通过外部命令调用插入动态内容,刚好能满足你添加CI状态、部署标签的需求。下面是具体实现步骤:
1. 核心原理:Git的动态格式化占位符
Git的格式化语法中,%(command:脚本路径 参数)可以执行指定的可执行脚本,并将脚本的输出直接插入到日志行中。我们只需要编写一个能根据提交哈希返回对应状态的脚本,再把它嵌入到git log的格式化规则里即可。
2. 编写自定义状态查询脚本
先写一个脚本(比如命名为commit-status.sh),让它接收提交哈希作为参数,返回你需要的状态文本(比如[DEPLOYED-DEV1]、[TESTS OK])。以下是示例脚本,你可以根据实际场景修改逻辑:
#!/bin/bash COMMIT_HASH="$1" # 验证提交哈希合法性 if ! git rev-parse --verify "$COMMIT_HASH" >/dev/null 2>&1; then echo "" exit 0 fi # ---------- 替换成你的实际逻辑 ---------- # 示例1:检查提交是否在生产部署分支 if git branch --contains "$COMMIT_HASH" | grep -q "prod"; then echo -e "\033[32m[DEPLOYED-PROD]\033[0m" # 绿色标记生产部署 # 示例2:模拟查询CI测试结果(实际可换成调用CI API) elif git log --grep="CI_FAILED" --oneline "$COMMIT_HASH" | grep -q "."; then echo -e "\033[31m[FAILED 12]\033[0m" # 红色标记测试失败 else echo -e "\033[33m[TESTS OK]\033[0m" # 黄色标记测试通过 fi
给脚本添加执行权限:
chmod +x commit-status.sh
3. 构造最终的git log命令
把脚本嵌入到git log的格式化规则中,结合你需要的--graph、--oneline等参数:
git log --graph --all --decorate --pretty=format:"%C(auto)* %h %%(command:./commit-status.sh %h) %s" | sed 's/ / /g'
参数解释:
%C(auto):保留Git默认的颜色渲染(分支、提交的颜色区分)%h:显示短提交哈希%%(command:./commit-status.sh %h):执行自定义脚本,传入当前提交的短哈希(注意shell环境下需要用两个%转义,直接在Git配置里用一个%即可)%s:显示提交标题sed 's/ / /g':处理脚本返回空的情况,避免出现连续空格
4. 做成Git别名(可选,方便日常使用)
把命令添加到Git别名里,以后直接用git log-with-status调用:
打开~/.gitconfig文件,添加以下内容:
[alias] log-with-status = !git log --graph --all --decorate --pretty=format:\"%C(auto)* %h %(command:./commit-status.sh %h) %s\" | sed 's/ / /g'
注意事项
- 执行效率:如果仓库提交量很大,每个提交都执行一次脚本会变慢,建议给脚本加缓存逻辑(比如把查询过的提交状态存在本地文件,下次直接读取)。
- 脚本路径:确保脚本放在Git仓库根目录,或者用绝对路径指定脚本位置,避免Git找不到。
- 颜色自定义:脚本里的ANSI颜色码可以根据需求调整,比如用
\033[34m表示蓝色,\033[0m恢复默认颜色。
内容的提问来源于stack exchange,提问作者Ondra Žižka
相关产品推荐
相关产品推荐

