我从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代码,我会非常高兴。我需要清理错误消息,因为我不希望用户在提交阶段看到这种丑陋的输出。有没有方法可以避免这种情况?或者处理这种情况的正确方法是什么?
如果此问题以前已经得到解答,我表示歉意。我在交流或互联网上找不到等价的文章。