如何为Git仓库启用identstring?

如何在Git仓库中启用ident $Id$文件?

总结:在产品中embedded版本信息的推荐方式是使用构build系统 ; 请参阅下面的详细信息和替代方法。


在Git中(我通常也在其他带有primefaces提交的VCS系统中考虑),没有像单个文件的版本那样的东西。

Git支持按需扩展$Id:$关键字,但是:

  1. 它仅根据要求完成。 你必须指定(或者使用globbing模式)一个文件(或者一组文件)有一个ident 属性集(在树中的'.gitattributes'文件中,或者在本地存储库设置的'.git / info / attributes'中) 。
  2. 它扩展到文件内容的SHA-1 (或更准确地说是$Id:<sha-1 of blob>$ )。 这个select的原因是Git不会触及分支切换或倒带过程中没有改变的文件; 如果'$ Id:$'扩展到版本信息,则需要更新每个受版本控制的文件,例如,在切换分支时。

Git支持相当宽的$Format:...$占位符,它扩展为提交信息(例如$Format:%H$被一个提交散列代替),但是:

  1. 只有在输出文件中运行git archive时才能进行扩展。
  2. 按要求完成,通过export-subst属性进行控制。

embedded版本信息的推荐方式是通过构build系统 (在构build阶段); 请参阅Git Makefile以及Git Web界面中由Makefile使用的GIT-VERSION-GEN脚本,以供git.git存储库使用。

然而,您可以使用clean / smudgefilter驱动程序(通过filter属性)来获取类似CVS的关键字扩展,在签出时扩展关​​键字,并在将内容input到存储库时进行清理。

您可以通过在.gitattributes文件中添加一个您希望使用此function的文件的模式,然后添加ident来完成.gitattributes操作。 这将取代$ Id $与$ Id:<40位SHA> $结帐的文件。 注意,不会像CVS / SVN那样给你一个文件的修订号。

例:

 $ echo '*.txt ident' >> .gitattributes $ echo '$Id$' > test.txt $ git commit -a -m "test" $ rm test.txt $ git checkout -- test.txt $ cat test.txt 

链接到gitattributes(5)手册页

Git的ident不会做$ Id $在其他版本系统中做的事情。 作为一个kludge,使用RCS与git:RCS的个人文件修订和git检查点作为一个整体的项目。 正如我所说,这是一个kludge,但它确实有道理(有时为某些事情)。