Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save sakyaer/64d8c5cee25b1913daad83d4e4ea6623 to your computer and use it in GitHub Desktop.
Save sakyaer/64d8c5cee25b1913daad83d4e4ea6623 to your computer and use it in GitHub Desktop.
git乱码解决方案汇总
原帖地址: http://topic.csdn.net/u/20110113/19/b0d5d506-4307-428b-a61d-7974aa66a2da.html
首先要说明的是:这里介绍的方法都是大部分是本人“悟”出来的,所以网上难有流传!
好方法不能自己私藏,否则就白忙乎这几天了,分享给有需要的朋友们。如果有转载,敬请注明来自*CSDN老邓*作品。
呵呵,给自己打广告,实在是无耻之极,权当无聊之时打字之用。
欢迎流传,为最优秀的分布式版本管理系统Git做宣传!!
步骤:
1. 下载:http://loaden.googlecode.com/files/gitconfig.7z
2. 解压到:<MsysGit安装目录>/cmd/,例如:D:\Program Files\Git\cmd
3. 进入Bash,执行gitconfig
搞定什么了?
看看gitconfig的内容先:
Perl code
#!/bin/sh
# 全局提交用户名与邮箱
git config --global user.name "Yuchen Deng"
git config --global user.email 邮箱名@gmail.com
# 中文编码支持
echo "export LESSCHARSET=utf-8" > $HOME/.profile
git config --global gui.encoding utf-8
git config --global i18n.commitencoding utf-8
git config --global i18n.logoutputencoding gbk
# 全局编辑器,提交时将COMMIT_EDITMSG编码转换成UTF-8可避免乱码
git config --global core.editor notepad2
# 差异工具配置
git config --global diff.external git-diff-wrapper.sh
git config --global diff.tool tortoise
git config --global difftool.tortoise.cmd 'TortoiseMerge -base:"$LOCAL" -theirs:"$REMOTE"'
git config --global difftool.prompt false
# 合并工具配置
git config --global merge.tool tortoise
git config --global mergetool.tortoise.cmd 'TortoiseMerge -base:"$BASE" -theirs:"$REMOTE" -mine:"$LOCAL" -merged:"$MERGED"'
git config --global mergetool.prompt false
# 别名设置
git config --global alias.dt difftool
git config --global alias.mt mergetool
# 取消 $ git gui 的中文界面,改用英文界面更易懂
if [ -f "/share/git-gui/lib/msgs/zh_cn.msg" ]; then
rm /share/git-gui/lib/msgs/zh_cn.msg
fi
这个脚本解决了:
1. 中文乱码
2. 图形化Diff/Merge
3. 还原英文界面,更好懂
其中最有价值的,就是Git的Diff/Merge外部工具TortoiseMerge配置。
安装MsysGit后,一个命令即可完成配置。
适用于MsysGit安装版与绿色版。
网上关于为Git配置TortoiseMerge来进行diff和merge的介绍几乎没有(反正我没有搜索到),但我认为TortoiseMerge是最好用的,单文件(一个可执行程序,绿色版,下载地址:http://sourceforge.net/projects/tortoisesvn/files/Tools/1.6.7/TortoiseDiff-1.6.7.zip/download),实在是绝配!
为什么不使用TortoiseGit?他们不是集成了TortoiseMerge吗?
理由:TortoiseGit只有Windows才有,我更喜欢git gui,结合gitk,跨平台实在相同的操作方式,更爽!
如果您离不开TortoiseGit,这篇文章就直接无视吧。
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