如何为Git存储库启用ident字符串?

pea*_*ean 32 git ident

如何启用ident $Id$Git存储库中的文件?

Jak*_*ski 40

简介:在产品中嵌入版本信息的推荐方法是使用构建系统 ; 请参阅下面的详细信息和替代方法.


在Git中(我认为通常在其他具有原子提交的VCS系统中)也没有像单个文件的版本那样的东西.

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

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

Git支持相当多的$Format:...$占位符,这些占位符扩展为提交信息(例如,$Format:%H$由提交哈希替换)但是:

  1. 只有在输出文件中运行git archive才会进行扩展.
  2. 它是根据请求完成的,通过export-subst属性控制.

嵌入版本信息的推荐方法是通过构建系统(在构建阶段)进行; 例如,参见Git web文件界面中Makefile使用的Git MakefileGIT-VERSION-GEN脚本,用于git.git存储库.

但是,您可以(ab)使用干净/涂抹过滤器驱动程序(via filter属性)来获得类似CVS的关键字扩展,在结帐时扩展关键字,并在将内容输入存储库时清除它们.


hal*_*ski 16

您可以通过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
Run Code Online (Sandbox Code Playgroud)

链接到gitattributes(5)手册页

  • 我只是玩弄了这个,据我所知,这只给出了特定文件的SHA,而不是整个存储库的$ Id $. (3认同)
  • 亲爱的读者,请注意在上面的命令行片段中,“rm test.txt”是至关重要的。对现有文件的检出操作不会向其添加提交哈希。 (2认同)