3 回答
TA贡献1875条经验 获得超3个赞
简介:在产品中嵌入版本信息的推荐方法是使用构建系统 ; 请参阅下面的详细信息和替代方法。
在Git中(我认为通常也在其他具有原子提交的VCS系统中)没有像单个文件的版本那样的东西。
Git确实支持$Id:$
关键字的按需扩展,但是:
仅在要求时完成。您必须指定(可能使用globbing模式)文件(或一组文件)具有
ident
属性集(在树中的'.gitattributes'文件中,或在'.git / info / attributes'中用于本地存储库设置)。它扩展到文件内容的SHA-1(或更准确地说
$Id:<sha-1 of blob>$
)。这种选择的原因是Git不会触摸在分支切换或倒带期间没有改变的文件; 如果'$ Id:$'扩展到修订信息,则需要更新每个版本控制的文件,例如在切换分支时。
Git支持相当多的$Format:...$
占位符,这些占位符扩展为提交信息(例如,$Format:%H$
由提交哈希替换)但是:
只有在输出文件中运行git archive时才会进行扩展。
它是根据请求完成的,通过
export-subst
属性控制。
嵌入版本信息的推荐方法是通过构建系统(在构建阶段)进行; 例如,参见Git web文件界面中Makefile使用的Git Makefile和GIT-VERSION-GEN脚本,用于git.git存储库。
但是,您可以(ab)使用干净/涂抹过滤器驱动程序(via filter
属性)来获得类似CVS的关键字扩展,在结帐时扩展关键字,并在将内容输入存储库时清除它们。
TA贡献1811条经验 获得超4个赞
您可以通过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
TA贡献1853条经验 获得超9个赞
Git的ident不会执行$ Id $在其他版本控制系统中的功能。作为kludge,使用RCS和git:RCS进行单个文件修订,并使用git来检查项目整体。正如我所说,这是一个kludge,但它确实有意义(有时为某些事情)。
- 3 回答
- 0 关注
- 560 浏览
添加回答
举报