10

我们如何在每次推送时使用 git 更改版本(每个 +1)?

例如我有一个 2 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 do 版本吗?

4

1 回答 1

13

您所要求的本质上是关键字扩展。首先,请查看 Git 常见问题解答问题“ git 有关键字扩展吗? ”。它说:

不建议使用关键字扩展。关键字扩展会导致各种奇怪的问题,而且无论如何都不是真正有用的,尤其是在 SCM 的上下文中。您可以使用自定义脚本在 git 之外执行关键字扩展。Linux 内核导出脚本执行此操作以在 Makefile 中设置 EXTRA_VERSION 变量。

如果你真的想这样做,请参阅gitattributes(5) 。如果您的翻译不可逆(例如 SCCS 关键字扩展),这可能会有问题。(提示:提供的$Id$-expansion将 40 个字符的十六进制 blob 对象名称放入 id 中;您可以使用这样的脚本找出哪些提交包含此 blob

请参阅此处进行讨论,以及此处了解 GIT 如何提供帮助

所以 git 确实有类似关键字扩展的东西,尽管不推荐。Git 也没有“文件修订”的概念(这就是您的@version编号),因此这无法准确地为您提供所需的内容。

您也可以创建一个挂钩(可能是一个预接收挂钩?),这将为您增加版本。这只是一个可执行文件(因此它可以是一个 shell/Python/Perl/Ruby/whatever-you're-comfortable-with 脚本),它会在您进行推送时自动执行。请参阅githooks 手册页

您的钩子脚本将:

  • 识别即将被修改的文件。
  • 其中,找到包含模式的@version \d+
  • 增加版本。您想增加父提交中的值,而不是文件中当前的值!

请注意,这至少与使用 Git 常见问题解答建议的关键字扩展一样糟糕,甚至可能更糟糕。这可能会导致烦人的合并冲突。您也可能很容易在代码中出现误导性的版本号,特别是如果您必须向旧版本提交错误修复,尽管每当您合并来自多个存储库/分支的更改时也可能会发生这种情况(这在大多数情况下很常见) git 工作流),如果你不小心的话。

于 2010-12-26T05:39:58.950 回答