如何在程序中加入项目提交的commit ID
作为一个软件开发工程师,相信大家经常会遇到设备上的程序有bug需要修改,但是因为程序年代太久远或源码分支太多,已经没办法知道设备上的程序是在哪一个提交里编译出来的,这时候查问题是非常困难的。如果没法确定设备上程序对应的代码分支,我们能做的就是给设备升级到最新版本,如果新旧版本和设备之间是兼容的那还好办,要是新旧版本和设备之间是不兼容,那就比较麻烦了,可能需要免费给客户换一台新的设备。
现在有一个方法可以避免以上的问题,那就是往gitlab编译出来的每一个程序里写入commit ID。这样子就可以把程序与gitlab上的提交记录联系起来了,这样子出现问题我们就可以到对应的提交记录里看源码,排查问题。
如何实现把commit ID写入程序中,以下是golang语言的一个小demo
main.go
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | package main import ( "flag" "fmt" "os" "runtime" ) var ( ver bool gitDescribe = "should be compiled with make." ) func main() { flag.BoolVar(&ver, "v" , false , "show verison info." ) // 解析命令行参数 flag.Parse() // 打印git版本、编译环境信息 if ver { fmt.Printf( "%s %s\ngoVersion: %s, compiler: %s, Platform: %s\nCopyright (c) 2000-2019 Sangfor Technologies Inc.\n" , os.Args[0], gitDescribe, runtime.Version(), runtime.Compiler, fmt.Sprintf( "%s/%s" , runtime.GOOS, runtime.GOARCH), ) return } } |
Makefile
1 2 3 4 | gitDescribe = $(shell git describe --dirty --always --tags) ldflags = "-s -X main.gitDescribe=${gitDescribe} " all: CGO_ENABLED=1 go build -ldflags ${ldflags} main.go |
使用:
make 编译成功后,用./main -v 可查看打进程序中的git commit 的缩写哈希值
备注:可自行修改,打进程序中的哈希值要不要缩写
git rev-parse HEAD //获取HEAD 的commit ID
git rev-parse --short HEAD //获取HEAD 的commit ID 哈希缩写
git describe --dirty --always --tags //获取commit ID 哈希的缩写
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架