我想将当前git修订版号添加到由go build
构建的二进制文件中,以便我可以执行./mybinary --revision
之类的操作来查看它的构建版本(通常用于以后的故障排除)部署)。显然,我不能将修订号放入源中,因为这将使用新修订更改源。我想知道是否有其他方法可以做到这一点?或者你认为这只是一个坏主意?如果是这样,建立二进制文件与其源版本之间关系的推荐方法是什么?对于分布式版本控制系统,版本号似乎不是一个好主意。
答案 0 :(得分:8)
如果您可以将git修订版带入$ VERSION并在主包中有一个名为version
的变量(类型字符串),则可以在构建过程中使用以下命令设置它:
#!/bin/sh
VERSION=`git log | head -n 1 | cut -f 2 -d ' '`
go build -ldflags "-X main.version=$VERSION" myfile.go
答案 1 :(得分:2)
对于所有和任何版本的Git代码最明显的方式,用于获取任何变更集的标识字符串(当我留给你在{{上显示此字符串的任务时) 1}}选项)是
答案 2 :(得分:2)
我创建一个version.go
个文件,其中只有一个var version string
,然后在调用go build
之前对其进行处理并在之后重置。换句话说,go不支持任何类型的代码生成,所以你需要依赖外部的东西才能做到这一点。
答案 3 :(得分:1)
您通常会使用标记(在其他版本控制系统中也称为标签)来记录构成特定构建的文件。 http://git-scm.com/book/en/Git-Basics-Tagging。我通常制作包含版本和构建日期的标签。例如v1.2_29Mar2013。如果我有几个产品可以使用相同的代码库构建,我将包含一些东西来识别哪个产品。