Git 如何仅获取更改多于空白的文件名?

Git 如何仅获取更改多于空白的文件名?,git,diff,Git,Diff,我尝试获取文件名,这些文件的更改不仅仅是空白。(换句话说,我不希望只列出更改了空格的文件。) 我试过“git diff--name only-w”它不起作用。它列出所有已更改的文件,包括仅包含空格的文件。添加忽略空行选项。试一试 git diff --name-only -w --ignore-blank-lines 为了解决这个问题,我写了一个脚本。希望对其他人有用 #!/usr/bin/env bash GIT_REPO_ROOT=`git rev-parse --show-toplev

我尝试获取文件名,这些文件的更改不仅仅是空白。(换句话说,我不希望只列出更改了空格的文件。)


我试过“git diff--name only-w”它不起作用。它列出所有已更改的文件,包括仅包含空格的文件。

添加忽略空行选项。试一试

git diff --name-only -w --ignore-blank-lines

为了解决这个问题,我写了一个脚本。希望对其他人有用

#!/usr/bin/env bash

GIT_REPO_ROOT=`git rev-parse --show-toplevel`
# cd ${GIT_REPO_ROOT}

for f in `git diff --name-only`;
do 
    MY_DIFF=`git diff -w ${GIT_REPO_ROOT}/${f}`
    if [[ ! ${MY_DIFF} == "" ]];
    then
        echo ${GIT_REPO_ROOT}/${f}
    fi
done
此脚本将结果从88个文件('git diff--name only')减少到8个文件。

使用以下一行代码:

git diff --name-only -z |
xargs -P`nproc` -0 -n1 bash -c '[[ $(git diff -w "$0") = "" ]] || echo "$0"'
  • 安全地处理带有空格或特殊字符的名称
  • 并行调用
    git diff
    ,以获得更快的结果。(如果结果顺序对您很重要,请删除
    -P`nproc`
    。)

它不起作用。仍然拥有与“git diff”相同数量的文件您的core.whitespace配置是什么?键入“git config core.whitespace”我的配置是尾随空格,tab前的空格如果文件名中有空格,您可能需要小心,因为
for
通常会在diff中的每个空格分隔的单词上迭代,而不是每行。您可以通过将
IFS
设置为换行符来解决这个问题,或者在read-rf时使用
git diff--name only;做已完成
而不是for完全符合我的要求。多谢了,这是一个潜在的单程航班。
|
使continue之后的命令变成同一个命令,只是我这样说是为了让它更可读,但它仍然只是一个命令。