git 状态不会转义未跟踪文件的路径



我注意到,当被跟踪的路径包含需要转义的空格或特殊字符时,git status --short将在输出时正确地对它们进行转义。但是,对于未跟踪的路径,git status --short无法对其进行转义,因此很难将其快速复制并粘贴到命令中。什么东西?是否可以强制git status --short转义所有路径,包括未跟踪文件的路径?

> git --version                                                                                                                                                                                                                    
git version 2.27.0                                                                                                                                                                             
> git status --short                                                                                                                                                                                                 Mon Sep  7 22:27:36 2020
A  normal_filename
A  "this is also escaped ''"
A  "this is escaped"
?? i'm testing
?? spaced file path

Git确实引用了一些路径,但没有引用其他路径。标准在core.quotePath配置中指定:

输出路径(例如ls文件、diff(的命令将引用";不寻常的";路径名中的字符,方法是用双引号括起路径名,并用反斜杠对这些字符进行转义,方法与C转义控制字符(例如,\t表示TAB,\n表示LF,\表示反斜杠(或值大于0x80的字节(例如,UTF-8中八进制\ 302\ 265表示"micro"(的方式相同。…无论此变量的设置如何,双引号、反斜杠和控制字符都将始终转义。一个简单的空格字符不被认为是"空格";不寻常";。

因此,目的不是在命令行引用内容来帮助您,而是以明确的方式提供输出。我已经查看了最新版本的Git(以及源代码(,被跟踪和未被跟踪的文件都调用了相同的函数,所以行为是一致的,如果不是你想要的。

如果您正在寻找要编写脚本的内容,您肯定需要git status --porcelain -z(或--porcelain=v2(,它将提供NUL终止的一致格式。

我提交了一份错误报告。在一个小时内,乐于助人的git维护人员很快确认了这是一个错误,并开始对其进行修补。请参阅此处的错误报告。我希望它能在git版本中修复>2.28.

最新更新