根本原因是git在信创服务器上对含非标准中文字符的路径解析失败,导致构建系统找不到文件;需从路径合法性、git行为控制、构建环境适配三方面协同处理。

一、禁止路径转义并强制 UTF-8 解析
信创系统终端默认 locale 多为 zh_CN.UTF-8,但部分 Git 版本(尤其旧版或定制打包版)仍会错误启用 core.quotepath 或忽略编码声明:
- 执行
git config --global core.quotepath false—— 禁用八进制转义,让中文路径以原始 UTF-8 字节形式参与操作 - 补全编码声明:
git config --global i18n.commitEncoding utf-8和git config --global i18n.logoutputencoding utf-8 - 验证生效:
git config --get core.quotepath应输出false;locale应含UTF-8
二、清理并规范仓库中的非法路径
已有提交若包含全角斜杠(/)、中文括号(())、零宽空格、或路径末尾含空格/句号等,Git 可能无法正确检出。须主动识别并重命名:
GitHub Hosts 更新工具(仅限中国用户),安全更新系统hosts文件,保留原有非GitHub条目,仅替换GitHub相关地址。支持备份恢复和风险提示。用于解决GitHub访问问题。
- 列出所有含非 ASCII 路径的文件:
git ls-files | LC_ALL=C grep '[^[:ascii:]]' - 对问题路径批量重命名(示例:将“项目文档(终稿).md”改为“project-doc-final.md”),使用
git mv提交 - 若已推送到远程,建议同步通知团队更新本地工作区,并运行
git clean -fdx && git reset --hard彻底重建工作目录
三、构建脚本与 CI 环境加固
信创服务器上的构建脚本常调用 find、ls、basename 等命令,它们对 UTF-8 路径支持不一。需显式保障环境一致性:
- 在构建脚本开头统一设置:
export LANG=zh_CN.UTF-8 LC_ALL=zh_CN.UTF-8 - 避免使用
for file in `ls`这类易被空格/换行破坏的写法;改用find . -name "*.java" -print0 | while IFS= read -r -d '' f; do ...; done - CI 流水线(如 Jenkins、GitLab CI)中,在 job 环境变量里固定添加
LANG和LC_ALL,并确认所用 Docker 镜像基础层已安装locales并生成对应 locale
四、开发侧前置防控机制
治本之策是阻断非法路径进入仓库:
- 在团队 Git hooks 中加入
pre-commit检查:git diff --cached --name-only | LC_ALL=C grep -q '[^[:alnum:]_.\-/]' && echo "Error: Non-standard chars in paths (e.g. Chinese, fullwidth, control chars)" && exit 1 - 推广使用英文命名规范:模块名、目录名、配置文件名全部采用 kebab-case,仅内容文件(如 README_zh.md)允许含中文
- 信创适配清单中明确标注:“路径名必须为 ASCII 子集(a–z, A–Z, 0–9, _, -, ., /),长度≤255 字节”










