如何为Git存储库启用标识字符串?
如何在Git存储库中的文件上启用如何为Git存储库启用标识字符串?,git,ident,Git,Ident,如何在Git存储库中的文件上启用ident$Id$?您可以通过在.gittributes文件中添加一个模式来实现这一点,该模式用于您想要使用此功能的文件,然后是ident。这将在签出文件时将$Id$替换为$Id:$。但请注意,它不会像在CVS/SVN中那样为您提供文件的修订号 例如: $ echo '*.txt ident' >> .gitattributes $ echo '$Id$' > test.txt $ git commit -a -m "test" $ rm te
ident$Id$
?您可以通过在.gittributes
文件中添加一个模式来实现这一点,该模式用于您想要使用此功能的文件,然后是ident
。这将在签出文件时将$Id$替换为$Id:$。但请注意,它不会像在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
链接到摘要:建议在产品中嵌入版本信息的方法是使用构建系统;有关详细信息和备选方法,请参见下文
在Git中(我认为通常在其他具有原子提交的VCS系统中也是如此),没有类似于单个文件版本的东西 Git确实支持按需扩展
$Id:$
关键字,但是:
ident
集(在树中的“.gittributes”文件中,或在本地存储库设置的“.git/info/attributes”中)$Id:$
)。选择此选项的原因是Git不会接触在分支切换或倒带期间未更改的文件;如果“$Id:$”扩展为修订信息,则需要更新每个受版本控制的文件,例如在切换分支时$Format:…$
占位符,这些占位符可扩展为提交信息(例如$Format:%H$
被提交哈希替换),但是:
export subst
属性进行控制但是,您可以(ab)使用清理/污迹过滤器驱动程序(通过
过滤器属性)来获得类似CVS的关键字扩展,在签出时扩展关键字,并在将内容输入到存储库时清理它们。Git的标识与$Id$在其他版本控制系统中的功能不同。作为一个难题,使用RCS和git:RCS进行单独的文件修订,并使用git检查整个项目。正如我所说,这是一个难题,但它确实有点道理(有时对某些事情来说)。在(十多年前)中建议:
但是,您可以(ab)使用clean/smudge过滤器驱动程序(通过过滤器属性)来获得类似CVS的关键字扩展,在签出时扩展关键字,并在将内容输入到存储库时清理关键字
批评是(以书面形式)
如果过滤器驱动程序真的有电源的话,它会非常棒。
据我们所知,它似乎只获取文件名作为参数:这甚至小于ident
过滤器,后者获取BLOB SHA1作为参数
在Git 2.27(2020年第2季度)中,Git内容过滤器不再无能为力了
Git 2.27为污点/清洁转换过滤器提供了更多信息(例如,除了已经给出的路径外,正在转换的blob出现在树的对象)
参见,、、(2020年3月16日)和(2020年3月10日)的作者。
(于2020年3月27日合并)
:允许将附加元数据传递到筛选进程
签字人:brian m。卡尔森
在各种情况下,筛选进程可以使用一些附加元数据
例如,有些人发现ident过滤器限制太大,希望在他们的污迹文件中包含提交或分支
此信息在签出期间不可用,因为此时HEAD尚未更新,并且在存档中也不可用
让我们添加一种将此元数据向下传递到筛选器的方法
我们传递正在操作的blob、treeish(如果存在commit而不是tree),以及正在操作的ref
请注意,我们不会在所有情况下传递此信息,例如在重新规范化或执行diff时,因为在这些情况下它没有意义
我们当前从筛选过程中获得的数据如下所示:
command=smudge
pathname=git.c
0000
通过此更改,我们将获得如下数据:
command=smudge
pathname=git.c
refname=refs/tags/v2.25.1
treeish=c522f061d551c9bb8684a7c3859b2ece4499b56b
blob=7be7ad34bd053884ec48923706e70c81719a8660
0000
关于这种方法,有几点需要注意
对于诸如签出之类的操作,treeish将始终是一个提交,因为我们无法签出单个树,但是对于其他操作,例如归档,我们最终只能在特定的树上操作,因此我们将只提供一个树作为treeish
类似的注释也适用于refname,因为在很多情况下,我们都没有ref
以及:
:为筛选器提供附加元数据
签字人:brian m。卡尔森
既然我们已经连接了代码库,可以将任何附加元数据传递给过滤器,那么让我们收集想要传递的附加元数据
我们传递此元数据的两个主要位置是签出和归档
在这两种情况下,读取HEAD不是一个有效的选项,因为只有在工作树被写入并且归档文件可以接受任意树之后,HEAD才会更新以进行签出
在其他情况下,HEAD通常反映当前使用的分支的refname
在其他情况下,我们传递的数据量较小,例如,我们实际上只能从逻辑上了解blob
我只是在玩这个,据我所知,它只为特定文件提供SHA,而不是整个re的$Id$