每次进行git push操作时更新版本?

10

如何在每次推送时使用 Git 进行版本更改(递增 +1)?

例如,我有两个 PHP 文件。

libs/lib1.php
libs/lib2.php
每个标题上通常会有一些信息,例如:
/**
 * LIB1.PHP
 * this libs does something like this
 * and that this is a doc for you
 * @version 145
 * @todo something todo
 * @author DAMS
 */

/**
 * LIB2.PHP
 * this libs does something like this
 * and that this is a doc for you
 * @version 445
 * @todo something todo
 * @author DAMS
 */

我们能否在每次推送时搜索并将版本号+1添加到代码中?


1
请参见https://dev59.com/FHNA5IYBdhLWcg3wAI7e。 - VonC
1个回答

13
你所要求的本质上是关键词扩展。首先,看一下Git FAQ问题 "Does git have keyword expansion?"。它说:
引用: 关键字扩展不受推荐。关键字扩展会导致各种奇怪的问题,而且在 SCM 的环境中也并没有什么用处。你可以使用自定义脚本在 git 外进行关键字扩展。Linux 内核导出脚本通过这种方式在 Makefile 中设置 EXTRA_VERSION 变量。
如果你真的想做到这一点,请参阅 gitattributes(5)。如果你的翻译无法逆转(例如 SCCS 关键字扩展),这可能会有问题。(提示:提供的 $Id$-expansion 将 40 个字符的十六进制 blob 对象名称放入 id 中;你可以使用像 this 这样的脚本确定包含此 blob 的提交。)
请参阅 here for a discussionhere on how GIT may help anyway
所以git确实有类似于关键词扩展的东西,但这并不推荐。Git也没有“文件修订”的概念(这就是你的@version号码出现的地方),所以这不能完全满足你的要求。
您可以创建一个钩子(可能是pre-receive钩子?)来为您增加版本。这只是一个可执行文件(因此它可以是shell/ Python/ Perl/ Ruby/任何您熟悉的脚本),当您进行push时会自动执行。请参阅githooks man page
您的钩子脚本应:
- 确定即将修改的文件。 - 在其中找到包含模式@version \d+的文件。 - 增加版本。您要增加父提交中的值,而不是当前文件中的值! 请注意,这至少与Git FAQ建议反对的关键字扩展一样糟糕,可能更糟。这很可能导致令人烦恼的合并冲突。您还可能在代码中得到误导性的版本号,特别是如果您必须向旧版本提交错误修复时,尽管如果您不小心,这也可能发生在合并来自多个存储库/分支的更改时(这是大多数git工作流程中非常普遍的)。

2
这取决于你自己的决定,但就我个人而言,我认为最好完全不要在代码中包含 @author 和 @version。与其在代码中存储 SCCS 已知的内容,不如向 SCCS 提问。 - Laurence Gonsalves

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