You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

git show --name-only输出特殊字符文件名转义异常解决方法

解决git show导出文件列表时特殊字符被转义的问题

直接通过Git原生参数输出原始文件名

Git默认开启core.quotepath配置,会对非ASCII字符、含特殊符号的文件名做八进制转义并包裹双引号,直接临时关闭该配置即可输出原始格式的文件名,替换原有命令为:

git -c core.quotepath=false show --pretty="" --name-only <commit_no> >> cpath.txt

参数说明:

  • -c core.quotepath=false:仅对本次执行的git命令生效,临时关闭路径转义规则,不会修改全局git配置
  • 输出的文件名为原始UTF-8编码,不会额外添加双引号,重音符号、中文等非ASCII字符会正常显示,可直接用于后续checkout操作

批量修正已导出的转义文件列表

如果已经生成了带转义内容的cpath.txt文件,可通过以下命令批量还原,无需手动逐行修改:

# 先备份原文件避免误改
cp cpath.txt cpath.txt.bak
# 执行还原:去掉转义行的外层双引号,还原八进制转义序列为原始字符
python3 -c "
lines = []
with open('cpath.txt', 'r', encoding='utf-8') as f:
    for line in f:
        line = line.rstrip('\n')
        if line.startswith('\"') and line.endswith('\"'):
            content = line[1:-1]
            raw = content.encode('utf-8').decode('unicode_escape').encode('latin1').decode('utf-8')
            lines.append(raw)
        else:
            lines.append(line)
with open('cpath.txt', 'w', encoding='utf-8') as f:
    f.write('\n'.join(lines) + '\n')
"

更稳妥的批量checkout写法

如果不需要留存文件列表,直接批量checkout对应提交的文件,建议使用-z参数输出NUL分隔的文件列表,完全规避空格、换行、特殊字符导致的解析错误:

git -c core.quotepath=false show --pretty="" --name-only -z <commit_no> | xargs -0 git checkout <commit_no> --

如果需要留存文件列表,加-z参数导出的文件无任何转义,后续读取时按NUL符分割即可,不会出现路径匹配失败的问题。


内容的提问来源于stack exchange,提问作者vanessen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 05:09:15