每次git push完成后更新版本?

时间:2010-12-26 05:08:43

标签: git post-update

我们如何在每次推送时使用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版本吗?

1 个答案:

答案 0 :(得分: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编号),所以这不能完全满足你的要求。

您也可以创建一个钩子(可能是一个预接收挂钩?),它会为您增加版本。这只是一个可执行文件(所以它可以是一个shell / Python / Perl / Ruby /任何你喜欢的脚本),当你进行推送时它会自动执行。请参阅githooks man page

你的钩子脚本会:

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

请注意,这至少与使用Git常见问题解答推荐的关键字扩展一样糟糕,而且可能更糟糕。这可能会导致恼人的合并冲突。您也可以轻松地在代码中使用误导性的版本号,特别是如果您必须将错误修正提交到旧版本,尽管每次合并来自多个repos / branches的更改时也可能会发生这种情况(这在大多数情况下很常见) git工作流程)如果你不小心。