我们如何在每次推送时使用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版本吗?
答案 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。)
所以git确实有像关键字扩展这样的东西,但不建议这样做。 Git也没有“文件修订版”的概念(这就是你的@version
编号),所以这不能完全满足你的要求。
您也可以创建一个钩子(可能是一个预接收挂钩?),它会为您增加版本。这只是一个可执行文件(所以它可以是一个shell / Python / Perl / Ruby /任何你喜欢的脚本),当你进行推送时它会自动执行。请参阅githooks man page。
你的钩子脚本会:
@version \d+
请注意,这至少与使用Git常见问题解答推荐的关键字扩展一样糟糕,而且可能更糟糕。这可能会导致恼人的合并冲突。您也可以轻松地在代码中使用误导性的版本号,特别是如果您必须将错误修正提交到旧版本,尽管每次合并来自多个repos / branches的更改时也可能会发生这种情况(这在大多数情况下很常见) git工作流程)如果你不小心。