-
-
Save sakyaer/64d8c5cee25b1913daad83d4e4ea6623 to your computer and use it in GitHub Desktop.
git乱码解决方案汇总
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
原帖地址: 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,这篇文章就直接无视吧。 |
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