git乱码解决及常用命令
来源:互联网 发布:淘宝客服培训计划 编辑:程序博客网 时间:2024/06/05 16:40
Git 是一款免费的、开源的、分布式的版本控制系统。旨在快速高效地处理无论规模大小的任何软件工程。
每一个 Git克隆 都是一个完整的文件库,含有全部历史记录和修订追踪能力,不依赖于网络连接或中心服务器。
其最大特色就是“分支”及“合并”操作非常快速、简便。
官方网站为: http://git-scm.com/
可以下到最新版的, Windows, Linux版本和说明等。
github是开源软件存放的库,相当于源代码界的博客:),GitHub可以托管各种git库,并提供一个web界面。提供私有和共有2种方式。
$sudo apt-get install git-core (可以使用git)
$sudo apt-get install git-gui (可以使用图形化工具gitk)
$sudo apt-get install gitg (可以使用图形化工具gitg, 比较好用一点)
安装 msysGit 和 TortoiseGit。
msysGit 是windows版本,TortoiseGit是windows上的图形版本工具。
安装完以后,会在右键的菜单上出现, Git, 和 TortoiseGit。
msysGit的一些配置(主要是中文处理)
1,修改…/Git/etc/git-completion.bash
alias ls=”ls --show-control-chars --color=auto”
说明:可以正常显示中文文件名
2,修改…/Git/etc/inputrc
set ouput-meta on
set convert-meta off
说明:可以输入中文
3,修改…/Git/etc/gitconfig
[gui]
encoding = utf-8
[i18n]
commitencoding = GB2312
说明:因为在windows新建文件是GB2312的编码,所以得告诉Git,要不然会被当成默认的utf-8给送出去,而不能识别。
[User]
name = xxx
email = xxx@gmail.com
配置文件在, /etc/gitconfig, ~/.gitconfig, .git/config下。
可以这样配置,如果添加'-global’选项,就会作为默认值。
$git config –global user.name “xxx”
$git config –blobal user.email “xxx@gmail.com”
$cd myproject
$git init
现在有了空的git存储,'.git’目录。然后可以添加文件了,
$git add .
$git commit –m “initial commit”
有了一个完整的git存储后,就可以 git log来查看。
$git log
git可以通过很多的协议进行网络通信,其中有三个最主要的协议,分别是ssh,http,git(专职为git服务的协议)
不管使用何种协议克隆git存储,格式都是这样:'git clone uri'
git 方式:
$git clone git://github.com/xxx/hello.git
$cd hello
$git log
http方式:
$git clone http://github.com/xxx/hello.git
$cd hello
$git log
请确保私钥的安全,保护代码的安全。
$ssh-keygen –t rsa
一直回车,就行,将会生成两个文件,一个私钥(id_rsa),一个公钥(id_rsa.pub)
私钥保存在当前用户的.ssh目录下,公钥交服务器管理人员添加到服务器上。
单人开发,
*修改文件
*提交更改 (git commit –a), #-a 的意思是git先将变更了的文件先载入(stage),然后提交
*重复
协作开发,
*修改文件
*查看变更
*载入变更
*提交载入的变更
*重复
*上传
查看现在的分支
$git branch
*master
可以看到目前只有一个分支,'master’, *代表我们目前工作在此分支上。
创建新分支
$git branch xxx_test
$git checkout xxx_test (切换到xxx_test分支)
这样,我们就不用担心在master分支上频繁的操作了。
合并分支
$git branch master
$git merge xxx_test
如果合并有冲突的话,那就打开文件,文件有有冲突的地方都标出来了,手工改写,然后保存,再重新载入。
$git add main.c
$git commit –am “fix confilect”
删除分支
$git branch –d xxx_test
查看标签
$git tag
$git tag –l v1.0.* (可以使用通配符)
$git show v1.0
创建标签
有两种最主要的标签--轻量级标签(lightweight)和带注释的标签(annotated)。
#带注释的标签
$git tag –a v1.0 –m “version 1.0”
$git tag
共享标签
默认情况下,'git push'命令不会将标签上传到远程服务器上。为了共享这些标签,你必须在'git push'命令后明确添加-tags选项
$git push --tags
显示补丁
$git log –p
查看统计数字
$git log --stat
查看分支拓扑图
$git log --pretty=oneline --graph
查看日期区间
$git log --pretty=oneline --before=”2011-1-1” --after=”2010-12-01”
查询作者
$git log --pretty=oneline --author=xxx_author
$git diff
$sudo apt-get install meld
好多命令都可以用gitk, gitg在linux上实现。windows上的话,可以用图形版的。
我一直是在cygwin下使用git,辅以TortoiseGit。使用上没什么问题,但今天在处理一个有中文文件名的项目时却出现文件名乱码的问题。
情况重现
- 在一个使用cygwin的bash提交的git项目中,已经完成了所有的提交,但使用TortoiseGit查看的时候,却发现仍有文件没有提交,甚至是有文件还处于未暂存的状态。于是使用TortoiseGit提交;
- 再次用cygwin下的git status查看,这次又发现了未提交的情况。再次用git commit命令行提交;
- 回到TortoiseGit下查看,问题又出现了!此时准备返回两次提交前的版本,却因为文件名乱码的问题,无法返回了!
乱码原因
搜索一番,发现git文件名、log乱码,是普遍问题,这其中有编码的原因,也有跨平台的原因。主要原因是Windows 系统中的Git对中文文件名采用不同的编码保存所致。
Windows系统中使用的msysGit,采用的是系统编码来保存文件名;而Cygwin中的Git默认采用UTF-8编码来保存文件名。如果两个软件同时对一个版本库进行操作,且都认为对方是使用自己使用的编码来保存文件,就会导致文件名编码混乱,无法识别。
这就导致,如果一直使用TortoiseGit(实际调用MsysGit)提交,那么中文文件名没问题;一直使用cygwin提交,中文文件名也没问题。但一定不能交叉使用。
分别设置LANG、LC_CTYPE、LC_ALL参数为同样的编码,问题依旧。
cygwin官方网站提到了非拉丁语文件名的问题,也许研究后能解决该吧:Chapter 2. Setting Up Cygwin
这里还有一篇讲解Linux系统编码文章:locale的设定及其LANG、LC_ALL、LANGUAGE环境变量的区别
官方终极解决方案
这个问题的官方终极解决方案,就是更新到msysGit1.7.10或更新版本。这个版本之后,msysGit和Git for Windows已经采用了UTF-8编码来保存文件名,不会再出现乱码的情况。安装和使用可参考这篇文章:使用Git、Git GUI和TortoiseGit
不幸的是,对于使用老版本msysGit提交的版本库,升级到msysGit1.7.10或者更高会出现编码问题。
有两篇文章介绍了这个问题的解决办法:
- 升級到 msysgit 1.7.10 的檔名亂碼處理方式(需要翻墙)
- upgrading to msysGit 1.7.10 (or higher)
下面的文章,是历史遗留,可以不看。若希望知其所以然,则不妨观之。
乱码情景对号入座和解决方案
乱码情景1
在cygwin中,使用git add添加要提交的文件的时候,如果文件名是中文,会显示形如274\232\350\256\256\346\200\273\347\273\223.png的乱码。
解决方案:
在bash提示符下输入:
core.quotepath设为false的话,就不会对0×80以上的字符进行quote。中文显示正常。
乱码情景2
在MsysGit中,使用git log显示提交的中文log乱码。
解决方案:
设置git gui的界面编码
设置 commit log 提交时使用 utf-8 编码,可避免服务器上乱码,同时与linux上的提交保持一致!
使得在 $ git log 时将 utf-8 编码转换成 gbk 编码,解决Msys bash中git log 乱码。
使得 git log 可以正常显示中文(配合i18n.logoutputencoding = gbk),在 /etc/profile 中添加:
乱码情景3
在MsysGit自带的bash中,使用ls命令查看中文文件名乱码。cygwin没有这个问题。
解决方案:
使用 ls --show-control-chars
命令来强制使用控制台字符编码显示文件名,即可查看中文文件名。
为了方便使用,可以编辑 /etc/git-completion.bash
,新增一行 alias ls="ls --show-control-chars"
终极解决方案
终极的解决方案是通过修改git和TortoiseGit源码实现,有网友这么做了:让Windows下Git和TortoiseGit支持中文文件名/UTF-8,也可以直接访问这个开源的Google项目:utf8-git-on-windows。
如果不抗拒命令行的话,直接用Cygwin来提交Git库。因为Cygwin其实是一个在Windows平台上的模拟器,它完全模拟GNU/Linux的方式运行,所以Cygwin中的Git是采用UTF-8编码来保存中文的。
又一个“终极”解决方案(来自)(msysGit1.7.10之后,不再推荐此方案)
在操作git时,把区域设置修改为 中文GBK。这之后就可以进行git相关操作了。
在终端中跟windows保持一致
切换回linux默认
改变文件名的编码
如果已经造成乱码的恶果,还可以在utf8和gbk之间切换文件名。真的修改,而不是像上面那样修改显示的(解码的)效果。
例外:convmv在fat32的U盘上运行无效,估计是fat32不允许非法编码。
git乱码解决方案汇总
本文链接:http://zengrong.net/post/1249.htm
2012-11-04更新:官方的“终极”解决方案:msysGit1.7.10开始使用UTF-8编码保存文件名。
2011-10-24更新: 从一篇链接到本篇文章的文章(我对这篇文章提出的与windows患者的相处之道深感赞同)找到了一个“终极”解决方案,但我没有测试。
我一直是在cygwin下使用git,辅以TortoiseGit。使用上没什么问题,但今天在处理一个有中文文件名的项目时却出现文件名乱码的问题。
情况重现
- 在一个使用cygwin的bash提交的git项目中,已经完成了所有的提交,但使用TortoiseGit查看的时候,却发现仍有文件没有提交,甚至是有文件还处于未暂存的状态。于是使用TortoiseGit提交;
- 再次用cygwin下的git status查看,这次又发现了未提交的情况。再次用git commit命令行提交;
- 回到TortoiseGit下查看,问题又出现了!此时准备返回两次提交前的版本,却因为文件名乱码的问题,无法返回了!
乱码原因
搜索一番,发现git文件名、log乱码,是普遍问题,这其中有编码的原因,也有跨平台的原因。主要原因是Windows 系统中的Git对中文文件名采用不同的编码保存所致。
Windows系统中使用的msysGit,采用的是系统编码来保存文件名;而Cygwin中的Git默认采用UTF-8编码来保存文件名。如果两个软件同时对一个版本库进行操作,且都认为对方是使用自己使用的编码来保存文件,就会导致文件名编码混乱,无法识别。
这就导致,如果一直使用TortoiseGit(实际调用MsysGit)提交,那么中文文件名没问题;一直使用cygwin提交,中文文件名也没问题。但一定不能交叉使用。
分别设置LANG、LC_CTYPE、LC_ALL参数为同样的编码,问题依旧。
cygwin官方网站提到了非拉丁语文件名的问题,也许研究后能解决该吧:Chapter 2. Setting Up Cygwin
这里还有一篇讲解Linux系统编码文章:locale的设定及其LANG、LC_ALL、LANGUAGE环境变量的区别
官方终极解决方案
这个问题的官方终极解决方案,就是更新到msysGit1.7.10或更新版本。这个版本之后,msysGit和Git for Windows已经采用了UTF-8编码来保存文件名,不会再出现乱码的情况。安装和使用可参考这篇文章:使用Git、Git GUI和TortoiseGit
不幸的是,对于使用老版本msysGit提交的版本库,升级到msysGit1.7.10或者更高会出现编码问题。
有两篇文章介绍了这个问题的解决办法:
- 升級到 msysgit 1.7.10 的檔名亂碼處理方式(需要翻墙)
- upgrading to msysGit 1.7.10 (or higher)
下面的文章,是历史遗留,可以不看。若希望知其所以然,则不妨观之。
乱码情景对号入座和解决方案
乱码情景1
在cygwin中,使用git add添加要提交的文件的时候,如果文件名是中文,会显示形如274\232\350\256\256\346\200\273\347\273\223.png的乱码。
解决方案:
在bash提示符下输入:
git config --global core.quotepath false
core.quotepath设为false的话,就不会对0×80以上的字符进行quote。中文显示正常。
乱码情景2
在MsysGit中,使用git log显示提交的中文log乱码。
解决方案:
设置git gui的界面编码
git config --global gui.encoding utf-8
设置 commit log 提交时使用 utf-8 编码,可避免服务器上乱码,同时与linux上的提交保持一致!
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没有这个问题。
解决方案:
使用 lls --show-control-chars
命令来强制使用控制台字符编码显示文件名,即可查看中文文件名。
为了方便使用,可以编辑 /etc/git-completion.bash
,新增一行 alias ls="ls --show-control-chars"
终极解决方案
终极的解决方案是通过修改git和TortoiseGit源码实现,有网友这么做了:让Windows下Git和TortoiseGit支持中文文件名/UTF-8,也可以直接访问这个开源的Google项目:utf8-git-on-windows。
如果不抗拒命令行的话,直接用Cygwin来提交Git库。因为Cygwin其实是一个在Windows平台上的模拟器,它完全模拟GNU/Linux的方式运行,所以Cygwin中的Git是采用UTF-8编码来保存中文的。
又一个“终极”解决方案(来自)(msysGit1.7.10之后,不再推荐此方案)
在操作git时,把区域设置修改为 中文GBK。这之后就可以进行git相关操作了。
在终端中跟windows保持一致
12
export LC_ALL=zh_CN.GBK; export LANG=zh_CN.GBKterminal -> set charactor encoding -> gbk
切换回linux默认
12
export LC_ALL=en_US.utf8; export LANG=en_US.utf8terminal -> set charactor encoding -> unicode(utf-8)
改变文件名的编码
如果已经造成乱码的恶果,还可以在utf8和gbk之间切换文件名。真的修改,而不是像上面那样修改显示的(解码的)效果。
1
convmv <filename> -f utf8 -t gbk
例外:convmv在fat32的U盘上运行无效,估计是fat32不允许非法编码。
http://blog.csdn.net/son_of_god/article/details/7341928
- git乱码解决及常用命令
- GIT 简介及git常用命令
- 【git】git 常用命令及使用方法
- git中文乱码解决
- windows git 乱码解决
- Git中的乱码解决
- Git中文乱码解决
- git客户端乱码解决
- git 常用命令,及简介
- Git常用命令及技巧
- git使用及常用命令
- git入门及常用命令
- git配置及常用命令
- Git 基本概念及常用命令
- git常用命令及技巧
- git常用命令及含义
- git安装及常用命令
- git配色及常用命令
- zoj 2082 过路费
- android:shape的使用
- 转载---Android 网络通信框架Volley简介(Google IO 2013)
- PHP实现程序单例运行
- 转载--网站关键性能指标查看技巧
- git乱码解决及常用命令
- 换硬币问题
- ipod touch cases meA4 5G9i QrMH
- new balance yrjM ciit kSpp
- Android学习路线(二十三)运用Fragment构建动态UI——Fragment间通讯
- CXF Spring开发WebService,基于SOAP和REST方式
- listview android:cacheColorHint,android:listSelector属性作用
- wsdl 语言
- java解压zip或者rar压缩文件