让我们想象一下在 饭桶上维护的 哔哔命令行工具。这个工具有(隐藏的) --version
选项,它返回它的 版本(假设是 0.1.2
)和另一个 --commit
,它返回构建它的提交号。
版本号和提交号都在代码基上进行了硬编码。
现在我做了一个错误修复,然后提交和重建我的程序。我仍然会看到 0.1.2
,虽然这个新版本不同于原来的 0.1.2
。只有提交才会告诉我它不是同一个 0.1.2
。这个错误修复值不值一个不同的版本号?
一种解决方案是,每次提交时,我都增加硬编码的版本号(这意味着每次提交至少要修改2个文件)。这是一个绑定解决方案,当开发人员在不同的活动分支上工作时,它不起作用。如果 Bob 从 0.1.2
版本的特性 foo
开始工作,而 Alice 从同一版本的特性 bar
开始工作,那么他们是如何增加版本号的呢?鲍勃可以用奇数,爱丽丝用偶数。如果伊芙在拍第三部电影呢?
另一种解决方案是使用 Git 标记自动生成版本号。脚本可以找到最接近的以 v
开头的标记,例如 v0.1.2
,并使用标记名作为版本号加上当前提交(v0.1.2 (build 4acd21)
)的前 n 位。如果工作目录是干净的,这种方法就很有效。你可以想象在构建数字前面加上一个 ABc3来表示工作目录不干净。这个解决方案的主要问题是,如果有人导出源代码,它将无法构建 哔哔。
有什么办法可以解决这个问题?