git diff输出中的重音符号

3

我想创建一个脚本/程序来自动化我的构建流程。我的主要目标是基于git上的提交生成一个.zip文件。我使用git diff命令来输出在此提交中更改的文件列表,我使用以下命令:

git  --no-pager diff --no-renames --name-only --diff-filter=ACM <commit_id>

问题出现在文件名或文件夹名中包含了一些葡萄牙特殊字符,它们被返回成代码。例如,我有一个名为:

db/alterações/2020-04-30.sql

的文件夹,但在列表中返回的是这样的结果:

db/altera\303\247\303\265es/2020-04-30.sql

我该如何使git返回特殊字符而不是这些代码呢?


这个回答解决了你的问题吗?让git diff正确显示UTF8编码的字符 - Chris Maes
不,我之前在搜索中看到过这个答案。它的区别在于它涉及文件内容中的Unicode字符,而不是文件名。因此,建议的解决方案对我没有起作用。 - Marlon
1个回答

6
Git会根据core.quotePath的设置来生成这些文件名,默认为true。当此选项为true时,具有最高位设置的字节将以八进制方式引用。当此选项为false时,它们不会被引用,但其他控制字符仍然会被引用。
此外,如果您使用-z,Git会生成以NUL结尾的字符串,并且不会引用字符。这样做的好处是,如果文件名中出现换行符和制表符,也能够优雅地处理它们。
因此,如果您的程序可以处理NUL字节作为终止符,请编写以下内容:
git  --no-pager diff --no-renames --name-only --diff-filter=ACM -z <commit_id>

如果不行,你可以写成这个样子:

git -c core.quotepath=false --no-pager diff --no-renames --name-only --diff-filter=ACM \
    <commit_id>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接