如何传递文件名参数gitconfig diff textconv?

问题描述 投票:2回答:1

关于textconvhttps://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''{}'论证的公约似乎不起作用。

git diff git-config
1个回答
3
投票

不幸的是,这些信息根本不可用。 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的贡献......)

© www.soinside.com 2019 - 2024. All rights reserved.