-
-
Save youzipi/eff000cc5f853739024e to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
git乱码解决方案汇总 http://zengrong.net/post/1249.htm | |
本站原创文章,转载请注明: 转载自zrong's Blog,原文 git乱码解决方案汇总,欢迎使用文章源码进行转载。 | |
本站转载文章会标明[转],转载请注明原始作者文章地址。 | |
我一直是在cygwin下使用git,辅以TortoiseGit。使用上没什么问题,但今天在处理一个有中文文件名的项目时却出现文件名乱码的问题。 | |
情况是这样的: | |
在一个使用cygwin的bash提交的git项目中,已经完成了所有的提交,但使用TortoiseGit查看的时候,却发现仍有文件没有提交,甚至是有文件还处于未暂存的状态。于是使用TortoiseGit提交; | |
再次用cygwin下的git status查看,这次又发现了未提交的情况。再次用git commit命令行提交; | |
回到TortoiseGit下查看,问题又出现了!此时准备返回两次提交前的版本,却因为文件名乱码的问题,无法返回了! | |
搜索一番,发现git文件名、log乱码,是普遍问题,这其中有编码的原因,也有跨平台的原因。因为git是从linux移植过来,默认采用UTF-8编码。而Windows默认使用UTF-16编码来保存文件名,应该就是这些不同的处理方式造成了乱码。下面是解决方案: | |
乱码情景1 | |
在cygwin中,使用git add添加要提交的文件的时候,如果文件名是中文,会显示形如274\232\350\256\256\346\200\273\347\273\223.png的乱码。 | |
解决方案: | |
在bash提示符下输入: | |
git config –global core.quotepath false | |
ore.quotepath设为false的话,就不会对0×80以上的字符进行quote。中文显示正常。 | |
乱码情景2 | |
在MsysGit中,使用git log显示提交的中文log乱码。 | |
解决方案: | |
设置git gui的界面编码 | |
git config –global gui.encoding utf-8 | |
设置 commit log 提交时使用 utf-8 编码,可避免服务器上乱码,同时与linix上的提交保持一致! | |
git config –global i18n.commitencoding utf-8 | |
使得在 $ git log 时将 utf-8 编码转换成 gbk 编码,解决Msys bash中git log 乱码。 | |
git config –global i18n.logoutputencoding gbk | |
使得 git log 可以正常显示中文(配合i18n.logoutputencoding = gbk),在 /etc/profile 中添加: | |
export LESSCHARSET=utf-8 | |
乱码情景3 | |
在MsysGit自带的bash中,使用ls命令查看中文文件名乱码。cygwin没有这个问题。 | |
解决方案: | |
使用ls –show-control-chars命令来强制使用控制台字符编码显示文件名,即可查看中文文件名。 | |
为了方便使用,可以编辑/etc/git-completion.bash ,新增一行 alias ls=”ls –show-control-chars” | |
最终,还是没能解决最开始我提到的文件名提交乱码的问题。不过倒是有了一个新发现:使用git gui命令,在MsysGit下,看到的中文文件名为正常;而在cygwin下,看到的中文文件名为乱码。 | |
同样的,如果一直使用TortoiseGit(实际调用MsysGit)提交,那么中文文件名没问题;一直使用cygwin提交,中文文件名也没问题。但一定不能交叉使用。这应该是两个平台默认处理中文文件名的方式不同造成的。 | |
分别设置LANG、LC_CTYPE、LC_ALL参数为同样的编码,问题依旧。 | |
cygwin官方网站提到了非拉丁语文件名的问题,也许研究后能解决该吧:Chapter 2. Setting Up Cygwin | |
这里还有一篇讲解Linux系统编码文章:locale的设定及其LANG、LC_ALL、LANGUAGE环境变量的区别 | |
貌似终极的解决办法是通过修改git和TortoiseGit源码实现的,有网友这么做了:让Windows下Git和TortoiseGit支持中文文件名/UTF-8 | |
本文参考链接: | |
搞定Git中文乱码、用TortoiseMerge实现Diff/Merge | |
MsysGit乱码与跨平台版本管理 | |
git中文文件名、目录名乱码应该怎么解决? |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment