使用Git提交时设置版本号的最佳实践

4

我希望能够自动设置程序的版本号,以便与git标签保持一致。如何做到这一点?建议采用什么方式?

示例

下面这个高度复杂的Python脚本打印它的版本号。每次提交后,我应该如何自动更新版本号?

# application.py
hardcoded_version_number = "0"
print("v"+hardcoded_version_number)

示例历史记录

每次提交之后,版本号都应该被更新。

发布 0.1 / 初始提交:

hardcoded_version_number = "0.1"
print("v"+hardcoded_version_number)

特性1:

hardcoded_version_number = "0.1-1-gf5ffa14" # or something like this
print("v"+hardcoded_version_number)

版本发布0.2:

hardcoded_version_number = "0.2"
print("v"+hardcoded_version_number)

目前我遇到的另一个问题是,我正在使用的GUI元素在运行时无法从任何外部来源读取版本号。因此,我唯一的选择就是硬编码。

1个回答

2
就生成这些版本的名称而言,我认为你的想法是正确的。 git describe 生成的字符串正好符合你要求的形式:
该命令查找可从提交访问的最新标记。如果标记指向提交,则仅显示标记。否则,它会将标记名称后缀为超出标记对象的附加提交数和最近提交的缩写对象名称。
如果您想从代码中访问此版本字符串,基本上有两个选择:
1.在构建阶段使用git describe提取它。在这种情况下,您可能需要将其写入未跟踪的临时文件,然后可以在运行时将其读入程序。我使用过这种方法,效果很好。 2.使用.gitattributes过滤器来清理和修改文件。我自己从未使用过这种方法,但基本上这是一种可以自动修改工作副本中文件的方式,以与存储库中的相同文件相对应。
为什么需要这些呢?Git不允许将提交的哈希写入自身。提交哈希是根据多个因素计算的,包括文件内容、提交消息、时间戳和父哈希。在您知道哈希是什么时,引用的提交实际上已被锁定。修改其内容或提交消息以包含其哈希会使旧哈希无效。
请参见此问题以获取更多讨论。

我一直在使用git describe来生成我的版本号。我目前的问题是,我正在使用的GUI元素无法在运行时从任何外部源读取版本号。所以我唯一的选择就是硬编码它。我会研究.gitattributes过滤器。 - warbaque
@KlausHelenius,我曾经在嵌入式C开发中遇到过类似的情况。我配置了我的构建系统以生成一个包含Git哈希作为常量的头文件,然后就能在我的代码中使用该常量了。 - Chris
问题在于我没有可配置的构建系统,也无法从外部文件中读取任何值。目前我的工作流程是:1)检出提交,2)运行“设置版本号”脚本,3)部署项目。我无法配置第三步,但我想摆脱第二步。 - warbaque

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接