Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
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中文文件名、目录名乱码应该怎么解决?
@vincentcn

This comment has been minimized.

Copy link

@vincentcn vincentcn commented Apr 18, 2014

Where is git-diff-wrapper.sh

@Yincan

This comment has been minimized.

Copy link

@Yincan Yincan commented Jun 7, 2014

在mac下面如果是乱码,添加了

[gui]
    encoding = utf-8
[i18n]
   logoutputencoding = utf-8

在.gitconfig下面。logoutputencoding 需要和其他地方设置成统一的编码。

@tvrcgo

This comment has been minimized.

Copy link

@tvrcgo tvrcgo commented Sep 25, 2014

在 Windows 下,把目录名和文件名乱码的文件删了,本地也提交了。
本地再次提交时,乱码的文件仍然待提交状态,一提交又提示 changes not staged for commit。
Git库里面删不掉它了。这种有解决办法吗?

@pengcgithub

This comment has been minimized.

Copy link

@pengcgithub pengcgithub commented May 23, 2017

解决方案:
在bash提示符下输入:
git config –global core.quotepath false

这条语句中的global前面应该是两个"-"。
如下:
git config --global core.quotepath false

@zongxiaomi

This comment has been minimized.

Copy link

@zongxiaomi zongxiaomi commented Oct 31, 2017

@ Yican在mac下面如果是乱码,添加了

[gui]
encoding = utf-8
[i18n]
logoutputencoding = utf-8
在.gitconfig下面。logoutputencoding 需要和其他地方设置成统一的编码。

这个答案是正确的

@qq1623299667

This comment has been minimized.

Copy link

@qq1623299667 qq1623299667 commented Dec 13, 2017

你好,我在Windows上用gitgui在本地commit的时候输入的中文,在本地显示正常,但是当上传代码到github上面的时候就乱码了。效果比如这个仓库:https://github.com/qq1623299667/blogtest
我代码中都是utf8编码的,所以都是正常显示,但是commit的中文是在gui中写的,我没有设置gui commit的编码,gui的commit可能默认按照windows的gbk编码来实现,请问我该怎么操作才可以让我的提交信息到了github上面也能正常显示?

ps:如果你说:那你直接设置gui commit编码就好了啊?哦天,这个我就是不知道才问的。。。
我需要的是一个方法,在github代码编码和windows本地编码的界面不乱码的前提下,能够按照你给的操作让github上面的commit信息也恢复正常编码,而不是一句简单的你百度啊你谷歌之类的~

@kid1412621

This comment has been minimized.

Copy link

@kid1412621 kid1412621 commented Nov 12, 2019

有遇到 git status 没问题,git branch 就乱码了的吗?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.