Git Clean Filter在空文件上失效

5

我从Git Attributes文档中设置了以下筛选器:

git config filter.dater.smudge expand_date
git config filter.dater.clean 'perl -pe s/\\\$Date[^\\\$]*\\\$/\\\$Date\\\$/"'

现在我运行以下命令:

touch nfile.txt
git add --all

然后会出现以下错误:

error: copy-fd: read returned Bad file descriptor
error: cannot feed the input to external filter perl -pe "s/\\\$DATE[^\\\$]*\\\$/\\\$DATE\\\$/"
error: external filter perl -pe "s/\\\$DATE[^\\\$]*\\\$/\\\$DATE\\\$/" failed

错误似乎与我的脚本无关,因为如果我运行这个脚本,就不会出现错误:
cat nfile.txt | perl -pe "s/\\\$DATE[^\\\$]*\\\$/\\\$DATE\\\$/"

此外,这个旧的线程提到错误可能是由于“从apply_filter调用的代码中的copy_fd”导致的,并建议修补git核心文件convert.c 中的函数filter_buffer_or_fd。个人而言,如果能避免修补核心Git代码,我会非常高兴。
我需要清理错误消息,因为我不希望用户在提交阶段看到这种丑陋的输出。有没有方法可以避免这种情况?或者处理这种情况的正确方法是什么?
如果此问题以前已经得到解答,我表示歉意。我在交流或互联网上找不到等价的文章。

1
有趣的是,当我在这里执行它时,空文件仍然被添加;如果你愿意,可以忽略该消息。补丁确实有效。看起来邮件只是被忽略了。 - jthill
这里仍然有问题,版本为2.4.2。._. - Feuermurmel
@Feuermurmel 是的,它是f6a1e1e,在开发中仍处于测试阶段。 - jthill
@jthill 我刚刚发布了一篇文章,后来才意识到你是修复程序的作者。它已经合并到主分支了。 - VonC
@VonC 嗯,提交本身有更好的注释 :-) - - - 但修复只是一个简单的一行代码,所以......另外,格式方面做得很好(而且完整)。 - jthill
显示剩余5条评论
1个回答

1

Git 2.5+版本在处理clean/smudge内容过滤器驱动程序时,对空文件的处理更加健壮。

请参见提交f6a1e1e,作者为Jim Hill(jthill,日期为2015年5月18日。
(由Junio C Hamano -- gitster --合并于提交152722f,日期为2015年6月1日)

sha1_file:将空缓冲区传递给索引空文件

使用过滤器添加一个空文件时,会从copy_fd中弹出一个有关坏文件描述符的投诉。

该评论简洁明了:

清除/模糊界面在过滤空内容时效果不佳(失败并通过了空输入)。可以争论,对于空输入产生除空以外的任何东西的过滤器是无意义的,但如果用户想要做奇怪的事情,为什么不呢?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接