Skip to content

Git 命令中文乱码的解决方案

标签
开发/Git
命令行/git
字数
475 字
阅读时间
3 分钟

文档兼容性

主体版本号文档地址(如果有)
gitgit version 2.32.1 (Apple Git-133)Git (git-scm.com)

说明

在使用 simple-git npm 库调用 Git 命令的子命令 git status 或者是 git diff-tree 时候会出现中文文件名乱码的情况:

比如:

  1. 获取包含中文文件名的提交记录哈希
shell
$ git log --online
9ae153c (HEAD -> main, origin/main, origin/HEAD) chore: 将所有内部链接转换为 Markdown 链接
  1. 使用查询到的 9ae153c 提交哈希进行 diff-tree 操作:
shell
$ git diff-tree --no-commit-id --name-only -r 9ae153c
"\342\232\240\357\270\217 \347\237\245\350\257\206\345\272\223\351\241\273\347\237\245.md"

可以发现返回的数据中包含了 \342\232\240\357\270\217 \347\237\245\350\257\206\345\272\223\351\241\273\347\237\245.md 这样的乱码字符串,或者我们说出现了 \xxx\xxx\xxx 这样的乱码。

原因

出现这个问题的原因是因为 Git 命令全局配置下有一个名为 core.quotepath 的选项默认值为 true,这将导致 Git 命令会将「不寻常」的字符通过包裹双引号和反斜杠进行转译[1]。将 core.quotepath 选项配置为 false 之后其将不会对高于 0x80(大于 ASCII 码表最大值 0x7E[2])的字符进行转译,而是选择全部逐字输出。

解决

在命令行程序中使用下面的命令进行配置:

shell
git config --global core.quotepath false

参考资料

贡献者

页面历史


  1. core.quotepath. The commands that output paths (e.g. ls-filesdiff), when not given the -z option, will quote "unusual" characters in the pathname by enclosing the pathname in a double-quote pair and with backslashes, the same way strings in the C source code are quoted. From git-config(1) - Linux man page ↩︎

  2. ASCII - Wikipedia ↩︎

撰写

布局切换

调整 VitePress 的布局样式,以适配不同的阅读习惯和屏幕环境。

全部展开
使侧边栏和内容区域占据整个屏幕的全部宽度。
全部展开,但侧边栏宽度可调
侧边栏宽度可调,但内容区域宽度不变,调整后的侧边栏将可以占据整个屏幕的最大宽度。
全部展开,且侧边栏和内容区域宽度均可调
侧边栏宽度可调,但内容区域宽度不变,调整后的侧边栏将可以占据整个屏幕的最大宽度。
原始宽度
原始的 VitePress 默认布局宽度

页面最大宽度

调整 VitePress 布局中页面的宽度,以适配不同的阅读习惯和屏幕环境。

调整页面最大宽度
一个可调整的滑块,用于选择和自定义页面最大宽度。

内容最大宽度

调整 VitePress 布局中内容区域的宽度,以适配不同的阅读习惯和屏幕环境。

调整内容最大宽度
一个可调整的滑块,用于选择和自定义内容最大宽度。

聚光灯

支持在正文中高亮当前鼠标悬停的行和元素,以优化阅读和专注困难的用户的阅读体验。

ON开启
开启聚光灯。
OFF关闭
关闭聚光灯。

聚光灯样式

调整聚光灯的样式。

置于底部
在当前鼠标悬停的元素下方添加一个纯色背景以突出显示当前鼠标悬停的位置。
置于侧边
在当前鼠标悬停的元素旁边添加一条固定的纯色线以突出显示当前鼠标悬停的位置。