git diff——仅包含忽略空格的名称似乎已损坏
我有一个存储库,其中有许多文件只有EOL空白更改,但有些文件有实际更改。我正在尝试创建一个别名,以便在vim选项卡中仅打开具有实际更改的文件的差异,作为这一过程的一部分,我正在运行git diff——仅包含忽略空格的名称似乎已损坏,git,diff,space,ignore,Git,Diff,Space,Ignore,我有一个存储库,其中有许多文件只有EOL空白更改,但有些文件有实际更改。我正在尝试创建一个别名,以便在vim选项卡中仅打开具有实际更改的文件的差异,作为这一过程的一部分,我正在运行git diff--name only…命令,以获取已更改的文件列表,以便在选项卡中打开它们 我的问题是,--在下线忽略空格,--忽略空格更改,--忽略所有空格与--仅名称组合时似乎什么也做不了 当我运行以下命令时,不会打印任何内容(myu文件有CR/LF更改): 但当我运行此命令时,我会打印出我的\u文件: git
git diff--name only…
命令,以获取已更改的文件列表,以便在选项卡中打开它们
我的问题是,--在下线忽略空格
,--忽略空格更改
,--忽略所有空格
与--仅名称
组合时似乎什么也做不了
当我运行以下命令时,不会打印任何内容(myu文件
有CR/LF更改):
但当我运行此命令时,我会打印出我的\u文件
:
git diff --ignore-space-at-eol --name-only my_file
有没有办法只获取没有空格更改的文件名?这对我来说似乎是一个bug,但我还没有找到类似的问题
我使用的是git 2.25.0版您需要:
- 首先获取文件列表:
git diff-–仅限名称
- 然后对每个文件执行一个git diff--ignore eol my_文件的空格
我最近碰巧遇到了一个类似的问题,并且还发现使用
--仅名称
选项既不能使用--忽略所有空格
也不能使用--忽略空行
正如评论中有人指出的那样,这是由于--仅名称仅检查文件是否已更改,而不计算实际更改。我发现您可以使用--stat
选项,因为这将计算文件的实际更改
因此,要获取在忽略空白更改的情况下已更改的文件列表,可以使用以下方法:
git diff--stat--忽略所有空格--忽略空行--diff filter=M
git diff--name only
列出文件而不查看内容。您不能按文件内容筛选列表。@我知道它是这样做的,但对我来说,这违反了我的期望(尤其是因为它没有通知我那些其他标志对于--仅名称)无效)。我愿意接受关于替代方法的建议。你可以试着向Git项目人员报告这是一个bug。他们可能会忽略你,但如果他们有足够多的人对此抱怨——我知道Git为什么会在内部这么做,但我不认为Git应该这么做,但我个人不太关心自己修复它:-)-也许有人会真的修复它。@torek如果OP选择打开一个bug,那么最好使用Git 2.27:它附带,这是我在结尾提到的)谢谢你的回答,当使用git中的本机扩散功能时,这是有效的。我想我需要一个更复杂的脚本来收集数组中的名称,以便将它们传递给vim,但这是我自己的应用程序,有点超出了这个问题的范围。我相信——安静能让我做我需要的事情。@DrEsperanto太好了!尽管如此,我相信你提到的git diff——在eol忽略空格——只说出我的_文件是一个bug。与我的答案相比,这是一个有趣的解决方案。向上投票。
git diff --ignore-space-at-eol --name-only my_file
if ! git diff --quiet --ignore-space-at-eol my_file; then
git diff --ignore-space-at-eol my_file
fi