在Windows下使用Git,涉及中文字符的问题有以下一些:
当一个远端仓库的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
,在选项里禁止分页,则无需设置上面的选项。
进行如下设置即可
1 | $ git config --global core.quotepath false |
这个问题与运行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.
一般地,我们将代码库的编码统一为utf-8,然后设置git的gui.encoding也为utf-8,就可正常显示中文字符:
1 | $ git config --global gui.encoding utf-8 |
暂时还没找到有效的解决方案。好在此问题只出现在本地,在远端仓库是能正常显示的。如果实在是无法忍受乱码,可在git gui中查看修改差异。
暂时还没找到有效的解决方案。
本作品由 Yysfire 创作,采用进行许可。转载时请在显著位置标明本文永久链接:
http://yysfire.github.io/tools/msysgit-Chinese-characters-garbled.html