git-archive命令是否也应该运行过滤器?

时间:2015-06-12 08:15:19

标签: git

我刚注意到git archive也在.gitattributes中运行了我的过滤器。这是记录在案的行为? (我在man page中没有看到。)

详情

作为一项练习,我编写了一个过滤器,它通过在*.tex文件中插入来自git describe --tags HEAD的信息(此代码根本没有用),以

形式涂抹。
\setGitVersion{<tag>}

并将其更改为

进行清理
\setGitVersion{}

(基本上是编码我自己的关键字替换的练习)。我只是注意到,如果我在存储库上运行git archive,则归档文件包含*.tex文件的污迹版本,而不是干净版本。

备注:因为无论我为归档指定了哪个提交,显示的标记始终是来自git describe --tags HEAD的信息,我可以断定git正在从repo中获取文件,在归档之前通过我的(损坏的)过滤器发送它。

问题

预期的行为是什么?如果是这样,它是否记录在某处,我可以指望它在将来表现得像这样(在这种情况下,我需要对过滤器更加小心)。如果没有,这是一个错误吗?

1 个答案:

答案 0 :(得分:0)

是的,这是预期的行为。归档执行存储在gitattributes中的过滤器。

没有特别详细记录,但gitattributes下有一个关于创建档案的部分。

  

如果为文件设置了属性export-subst,那么在将此文件添加到存档时,Git将展开多个占位符。扩展取决于提交ID的可用性,即,如果git-archive[1]已被赋予树而不是提交或标记,则不会进行替换。占位符与选项--pretty=formatgit-log[1]的占位符相同,只是它们需要像这样包装:文件中的$Format:PLACEHOLDERS$。例如。字符串$Format:%H$将被提交哈希替换。

我不希望将来这种行为作为相关且通常必要的功能而消失。