关于textconv
的https://git.wiki.kernel.org/index.php/Textconv的文件有简洁的措辞:
~/.gitconfig
必须指明要为textconv驱动程序执行的命令:[diff "<driver_name>"] textconv=<command>
我找不到任何关于如何格式化命令的文档,该命令需要将文件名作为位置参数传递。例如,我想使用以下pdf formatter命令,它需要破折号作为写入stdout的最后一个参数:
[diff "pdf"]
textconv = pdftotext -layout "$1" -
现在我不得不编写自定义的单线程shell脚本作为解决方法,但它们开始累积,它变得有点烦人。
有没有办法没有这些脚本? "$1"
或xargs''{}'
论证的公约似乎不起作用。
不幸的是,这些信息根本不可用。 Here是实际实现文本转换的代码:
temp = prepare_temp_file(r, spec->path, spec);
*arg++ = pgm;
*arg++ = temp->name;
*arg = NULL;
child.use_shell = 1;
child.argv = argv;
child.out = -1;
if (start_command(&child)) {
remove_tempfile();
return NULL;
}
这两个参数是程序本身的名称(通常是argv [0])和包含从它们所在位置提取的位的临时文件的名称(基于spec
参数;请参阅上面的链接以获取更多详细信息)。
规范可能在大多数或所有情况下都带有原始路径名(如果没有,请查看此函数下面的函数),它不会被复制到程序参数中。 textconv过滤器代码可以但不使用Git合并驱动程序使用的%
-expansion技术,如果它确实(但它没有),它可能有一个传递原始文件名的%
-escape。但当然不是。
(您可以自己克隆Git并对其进行操作,也许可以试图说服Git人员将您的更改作为对公共Git的贡献......)