【问题标题】:Accent Characters in git diff outputgit diff 输出中的重音字符
【发布时间】:2020-05-05 11:59:19
【问题描述】:

我正在尝试创建一个脚本/程序来自动化我的构建过程。我的主要目标是根据来自 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 返回特殊字符而不是这些代码?

【问题讨论】:

  • 没有。我以前在搜索中看到过这个答案。它的区别是因为它关于文件内容中的 unicode 字符,而不是文件名。所以建议的解决方案对我不起作用。

标签: git


【解决方案1】:

Git 使用 core.quotePath 的设置生成这些文件名,默认为 true。当此选项为真时,设置了最高位的字节以八进制引用。 When the option is false, they are not, but other control characters still are.

此外,如果您使用 -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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-07
    • 2014-05-24
    相关资源
    最近更新 更多