幽谷奇峰 | 燕雀鸣幽谷,鸿鹄掠奇峰

Windows下msysgit中文支持问题的探讨


在Windows下使用Git,涉及中文字符的问题有以下一些:

  1. git log 命令输出的中文字符显示为乱码
  2. git commit 时,文件名里的中文字符显示为转义序列
  3. git commit -m 后所跟的提交说明里有中文字符,当push到GitHub远端仓库后,网页上提交说明显示乱码
  4. git gui 里的中文字符显示为乱码
  5. git diff 命令输出的中文字符显示为乱码
  6. 本地仓库里的中文文件名push到GitHub远端仓库后,在GitHub网页上显示为乱码

问题1:git log 里的中文字符显示为乱码

当一个远端仓库的log里有中文字符,你clone或pull到本地后,通过 git log 查看,会显示为乱码,这是因为git默认将log信息保存为utf-8编码格式,而在Windows环境下,终端的编码格式为cp936。因此,需要做如下设置:

1
$ git config --global i18n.logoutputencoding gb2312

这样,git就会将log信息转换成GBK编码,然后输出显示。

如果在git-bash中使用msysgit,还可以在/etc/profile 或 ~/.bashrc 中设置(非必需):

1
export LESSCHARSET=utf-8

说明:git log 命令不像其它 vcs 一样,n 条 log 从头滚到底,它会恰当地停在第一页,按 space 键再往后翻页。这是通过将 log 送给 less 处理实现的。以上即是设置 less 的字符编码,使得 git log 可以正常显示中文。其实,它的值不一定要设置为 utf-8,比如 latin1 也可以。还有个办法是 git --no-pager log,在选项里禁止分页,则无需设置上面的选项。

问题2:git commit 时文件名里的中文字符显示为转义序列

进行如下设置即可

1
$ git config --global core.quotepath false

问题3:中文提交信息push到远端后显示为乱码

这个问题与运行git命令所处的终端模拟器和壳程序是相关的。 如果是直接在Windows自带的命令提示符里运行git,则可设置Git如下:

1
2
$ git config --global i18n.commitencoding utf-8
$ git config --global core.editor vim

然后在vimrc里设置:

1
autocmd BufNewFile,BufReadPost,BufWritePre,FileWritePre COMMIT_EDITMSG,git-rebase-todo setlocal fileencoding=utf-8

这样设置后,提交信息(commit message,就存放在项目的.git/COMMIT_EDITMSG文件中)就会以utf-8编码格式保存,无论是在本地,还是远端仓库都能正常显示。

如果是在ConEmu(终端模拟器)里通过bash(壳程序)运行git的话,最好设置i18n.commitencoding为GB2312:

1
$ git config --global i18n.commitencoding gb2312

同时,将ConEmu的"Font charset"也设置成GB2312.

问题4:git gui 里的中文字符显示为乱码

一般地,我们将代码库的编码统一为utf-8,然后设置git的gui.encoding也为utf-8,就可正常显示中文字符:

1
$ git config --global gui.encoding utf-8

问题5:git diff 命令输出的中文字符显示为乱码

暂时还没找到有效的解决方案。好在此问题只出现在本地,在远端仓库是能正常显示的。如果实在是无法忍受乱码,可在git gui中查看修改差异。

问题6:本地仓库里的中文文件名push到GitHub远端仓库后,在GitHub网页上显示为乱码

暂时还没找到有效的解决方案。


本作品由 Yysfire 创作,采用知识共享许可协议进行许可。转载时请在显著位置标明本文永久链接:
http://yysfire.github.io/tools/msysgit-Chinese-characters-garbled.html


相关文章


最后修改
2014-07-05 15:30
发表时间
2014-07-05 14:40
本文标签
git 2 乱码 2 msysgit 1 Windows 10 中文 1
关注我