gpt4 book ai didi

python - 如何用 git 重写 python __version__?

转载 作者:IT老高 更新时间:2023-10-28 21:33:41 24 4
gpt4 key购买 nike

我想在我的模块中定义一个 __version__ 变量,它应该在 git commit 时自动更新,类似于 SVN keywords做。有没有办法在 Git 中实现它?有没有人有一个可行的例子?

我考虑过使用 GitPython ,但我不想引入另一个依赖项,我希望从 SVN 存储库或作为 zip 包下载模块的用户具有相同的版本控制方案(我不在乎这是一些难以辨认的哈希)。

编辑:我的特殊问题是我必须运行模拟,其结果取决于模拟脚本的确切版本。因此,每次我都必须将版本号与模拟结果一起存储。如果两者不同步,可能会产生非常可怕的后果。

最佳答案

最好将其作为打包的一部分进行,而不是在每次提交之后进行。

有两个主要选项:

  • 使用 git-archive 打包并使用 export-subst attribute .不幸的是,您可以替换的内容仅限于 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 ,在提交 ge3d3f7d ”,然后您可以在打包/构建时以某种方式将其插入代码中的正确位置。这就是 Git 本身所做的;结果被转储到一个文件中,其内容被读入makefile,然后通过-D传递到构建中。预处理器选项,并直接放入各种文件名(例如发布压缩包)中。

如果您真的非常想在每次提交后执行此操作,您可以使用 post-commit Hook ,但只有您(以及您提供 Hook 的人)才能拥有它,而且很有可能获得不同步 - 您还必须有一个 checkout 后 Hook ,等等。对于创建需要这个版本号的东西的任何进程来说,这真的更好。

您还可以使用涂抹/清洁过滤器,这将更像您真正想要的(而不是简单地在每次提交之后)。

关于python - 如何用 git 重写 python __version__?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5581722/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com