最好将其作为包装的一部分,而不是在每次提交之后进行。
有两个主要选项:
使用git-archive
包装,并使用export-subst
属性。遗憾的是,您可以替换的内容仅限于中的占位符git log --format=...
。例如,您可以编写__version__ = $Format:%H$
文件,放入<filename> export-subst
.gitattributes,然后在运行git archive
时,将其更改为存档时使用的提交的完整哈希。这只是您要的内容,但我确实希望使用下一个选项。
作为打包过程(通常是编译后的软件包的构建过程)的一部分,自己进行操作并使用git describe
。这将为您提供一个漂亮的漂亮字符串,如v1.7.4.1-59-ge3d3f7d
,表示“ 59在标签v1.7.4.1
处提交,在commit处ge3d3f7d
”,然后您可以在打包/构建时以某种方式将其插入代码中的正确位置。这就是Git本身所做的;结果被转储到文件中,其内容被读取到makefile中,然后通过-D
预处理器选项传递到构建中,并直接放入各种文件名(例如发行版tarball)中。
如果您确实真的想在每次提交之后执行此操作,则可以使用提交后的钩子,但是只有您(和您提供钩子的那些人)才能拥有它,并且很可能不同步- 您还必须具有结帐后挂钩等等。对于任何创建需要此版本号才能自己获取的版本的过程来说,这确实更好。
您还可以使用污迹/清洁过滤器,它更像您实际想要的(而不是每次提交后都简单)。