我想在git中使用标签管理我的代码版本。
如果我有新的版本,我会创建一个新的带注释的标签,例如1.3.0.
现在我想在代码本身中提供此版本号。
为此,我尝试使用:
git describe --tags
将结果放入文件中。显然,我总是背后的一个标签。如果我创建新标记1.3.1.
,代码仍将引用版本1.3.0
,则只有以下提交才会引用新数字。
是否有干净的解决方法?通过常规提交,我可以使用--amend
覆盖一次内容,但对于标签,这似乎不存在。
某些背景:
我正在使用python
setuptools
。在我的设置文件中,我使用git describe --tags
并将此作为我的版本安全。此外,它被写入文件,如果没有安装git,则从该文件中读取版本
我的python代码然后读取此文件,以便能够通过./script.py --version
在版本上打印它。
答案 0 :(得分:2)
这里有一个基本的chicken-and-egg problem:如果版本字符串本身处于版本控制之下,那么如何将 next 版本字符串放入受控文件之前< / em>您将该文件提交到版本控制系统并创建版本?
没有一个答案是完全令人满意的(并且在Mercurial中这个问题是不可避免的,因为标签位于文件.hgtags
中,然后由版本控制,以便在检索时版本1.3.0,标签名称1.3.0不再可用:它仅在 next 版本的.hgtags
文件中。不过,Git的常用技巧是确保版本字符串不直接编码在任何受版本控制的文件中。
在我对How can I add git version info into cython-built .so file?的回答中,我概述了执行此操作的一般方法,以及在setup.py
文件中执行此操作的具体方法。你没有提到你的系统是如何构建的 - 即,如何发布版本 - 但一般方法仍然适用。
一个不太令人满意但仍然相当可行的方法是将标记硬编码到文件中,编写打算的标记以分配到文件中,提交文件,然后标记承诺。您可以(也可能应该)自动完成此过程。