'git status' 输出中中文文件名显示问题
问题描述
最近新建了一些中文名文件,在使用git status
命令中偶然发现,输出的结果中无法显示这些中文文件名:
Git 的版本是2.24.4。
解决方案
查了一下,所用的 Centos 系统的字符集是UTF-8
:
一般 Linux 平台的默认字符集都是UTF-8
,Git 大部分的命令在UTF-8
下都工作的很好,比如提交修改时,commit message 就可以用中文;显示 commit 历史,也能正常显示中文。但是git status
命令下,中文文件名就无法正常显示。
其实,上面显示的是中文名的八进制的字符编码,你如果用printf
命令是可以正常打印出来的:
上 Google 查了一下,发现 Git 的配置中有一项配置和如何显示文件路径有关:
core.quotePath
Commands that output paths (e.g. ls-files, diff), will quote “unusual” characters in the pathname by enclosing the pathname in double-quotes and escaping those characters with backslashes in the same way C escapes control characters (e.g.
\t
for TAB,\n
for LF,\\
for backslash) or bytes with values larger than 0x80 (e.g. octal\302\265
for “micro” in UTF-8). If this variable is set to false, bytes higher than 0x80 are not considered “unusual” any more. Double-quotes, backslash and control characters are always escaped regardless of the setting of this variable. A simple space character is not considered “unusual”. Many commands can output pathnames completely verbatim using the-z
option. The default value is true.
简单地说,当 Git 命令的输出中会显示文件的路径时(比如 status、ls-file、diff 等命令),路径中如果有转义字符,或者 UTF-8 编码值大于 0x80的字节,整个文件路径会被放在引号中,并显示这些转义字符或 UTF-8 编码值。这个选项默认是打开的,换句话说,如果路径中有中文,它显示的是中文的 UTF-8 编码值。所以,要想正常显示中文,只要把这个选项设为 false 即可。
用 root 身份(或sudo)打开/etc/gitconfig
,加入设置项:
|
|
保存即可。该设置对所有用户有效。
参考
https://git-scm.com/docs/git-config
「 您的赞赏是激励我创作和分享的最大动力! 」
- 原文链接:https://zhuyinjun.me/2020/solve_chinese_file_name_displaying_issue_in_git/
- 版权声明:本创作采用 CC BY-NC 4.0 国际许可协议,非商业性使用可以转载,但请注明出处(作者、链接),商业性使用请联系作者获得授权。