将 `git diff --name-only` 的输出用于非 ASCII 字符的文件名

Tho*_*s W 4 git bash utf-8

的输出git diff --name-only对于非 ASCII 的文件名不是很有用。例子:

git init
echo Germany > Düsseldorf.txt
echo Mexico > Cancún.txt
git add *.txt

while read f
    do cat "$f"
done < <(git diff --cached --name-only)
Run Code Online (Sandbox Code Playgroud)

这导致以下输出:

cat: '"Canc303272n.txt"': No such file or directory
cat: '"D303274sseldorf.txt"': No such file or directory
Run Code Online (Sandbox Code Playgroud)

如何获取对进一步处理有用的暂存文件列表?

Kam*_*Cuk 5

如何获取对进一步处理有用的暂存文件列表?

使用零分隔流。

git diff -z --cached --name-only |
while IFS= read -r -d '' f; do
   cat "$f"
done
Run Code Online (Sandbox Code Playgroud)

https://mywiki.wooledge.org/BashFAQ/020

无论如何,使用 just cat, then: git diff -z --cached --name-only | xargs -0 cat