Git 系列之二:Windows 下 Git 客户端的选择,及 msysGit 各类中文问题的解决

Git 系列之二:Windows 下 Git 客户端的选择,及 msysGit 各类中文问题的解决

在 Windows 下用 NetBeans 作 PHP 开发,首先想到的是 NetBeans 的插件:NBGit。
评价:能用;若需没有的功能,能够自定义菜单调用自定义 bat 脚本;开发不活跃,使用没有信心。git

第二个则是:TortoiseGit,SVN 小乌龟的 Git 版本。
评价:该有的功能基本都有了,仍是不错的。windows

另外,TortoiseGit 只是 GUI 工具,使用它须要先安装 msysGit,这是正宗的 Git 之 Windows 版本。msysGit 有个简单的 GUI 工具,及简单的 Explorer 集成;但它自带的 Bash 很是好用,深得 Linux 的真传。bash

选择:msysGit。
理由:
NBGit 不用说,功能都不完善,还须要本身定制 bat 脚本(若此,则它一样要依赖 msysGit);开发不活跃,极可能 NetBeans 下个版本更新就不能用了;何况,咱们还有别的项目,不使用 NetBeans。服务器

TortoiseGit 从功能上说是完善的,但它只是功能的堆砌而已,使用时彻底体会不到 GUI 带来的便利。相反,它让人感受很繁琐,一个劲地点鼠标,点来点去全是跟菜单打交道,远离了 Git 命令、远离了 Git 输出提示、远离了真相。less

msysGit 的 Bash 很是好用;加上 Git 强大的 alias 功能,咱们彻底能够自定义一个 $ git go,使得 90% 的状况下只须要这一个命令,即便是不熟悉命令行的 Windows 用户也会以为很好玩;由于 NBGit、TortoiseGit 都须要 msysGit 作底层,咱们直接用底层工具也避免了上层 GUI 带来的额外的 bug。编辑器

须要的配置:工具

一、C:\Program Files\Git\etc\git-completion.bash:ui

alias ls='ls --show-control-chars --color=auto'

说明:使得在 Git Bash 中输入 ls 命令,能够正常显示中文文件名编码

二、C:\Program Files\Git\etc\inputrc:spa

set output-meta on
set convert-meta off

说明:使得在 Git Bash 中能够正常输入中文,好比中文的 commit log。

三、C:\Program Files\Git\etc\profile:

export LESSCHARSET=utf-8

说明:$ git log 命令不像其它 vcs 同样,n 条 log 从头滚到底,它会恰当地停在第一页,按 space 键再日后翻页。这是经过将 log 送给 less 处理实现的。以上便是设置 less 的字符编码,使得 $ git log 能够正常显示中文。其实,它的值不必定要设置为 utf-8,好比 latin1 也能够……。还有个办法是 $ git –no-pager log,在选项里禁止分页,则无需设置上面的选项。

四、C:\Program Files\Git\etc\gitconfig:
[alias]
go =
 “! bash -c \”git pull && git add .; if [ \\\"$*\\\" == \\\"\\\" ]; then git commit -a; else git commit -am \\\”$*\\\”; fi; git push origin master:your-id;\”"

说明:强大的 alias,有了这个,咱们 90% 的状况下只须要输入 $ git go 这一个命令,免去了先拉后提交再推的繁琐步骤。

两种用法:
$ git go

$ git go aaa 修订说明

命令后带修订说明时,会直接提交。须要注意的是,在“修订说明”以前,有还个“aaa”,这是个 bug,参数中的第一个会被忽略,因此随便写一个凑数的……。

若命令行里没有提供修订说明,则会自动弹出一个编辑器,等待输入。默认的编辑器是 Vim。Vim 的使用是很简单的,首先要明白它有两个模式,一个是命令模式、一个是输入模式。Vim 启动的时候默认的是命令模式,须要先按’i'键,进入输入模式;而后就正常编辑;编辑完成以后,将输入法切换回英文状态,按 Esc 从新进入命令模式;此时按 ‘(Shift):wq‘ 并回车,w 表示写入保存、q 表示退出。完毕!

若实在不习惯 Vim,也能够设置为其它编辑器:

$ git config --global core.editor "notepad"

其中 notepad 能够替换为更好用的 wordpad、notepad++ 等(不过它们在命令行里没法直接访问,得先设置 PATH 变量)。

以上 alias 是为 Windows 定制的,Linux 下能够写得更优雅,不过鉴于使用上没分别,就保持一致吧~。

[gui]
encoding = utf-8

说明:咱们的代码库是统一用的 utf-8,这样设置能够在 git gui 中正常显示代码中的中文。

[i18n]
commitencoding = GB2312

说明:若是没有这一条,虽然咱们在本地用 $ git log 看本身的中文修订没问题,但,1、咱们的 log 推到服务器后会变成乱码;2、别人在 Linux 下推的中文 log 咱们 pull 过来以后看起来也是乱码。这是由于,咱们的 commit log 会被先存放在项目的 .git/COMMIT_EDITMSG 文件中;在中文 Windows 里,新建文件用的是 GB2312 的编码;可是 Git 不知道,当成默认的 utf-8 的送出去了,因此就乱码了。有了这条以后,Git 会先将其转换成 utf-8,再发出去,因而就没问题了。

以上,给 Windows 下的同事在 Git Bash 里推代码就比较完美了。不过仍然有 3 个问题:

一、上面的 alias $ git go 有 bug,代码修订说明以前要输入一串字符凑数;

二、$ git diff,若是代码里有中文,会显示乱码;

三、$ git checkout 有时候须要修改/增删不少文件,若是某些文件被占用,会被 Windows 拒绝,致使失败,甚至可能形成版本库出现没法修复的问题。

这 3 个都是可承受的问题,前两个应该有办法解决;第 3 个归功于文件系统,只能尽可能避免 checkout,实在须要的时候先注销一次,就不会有问题了。

【TIP】该文只是解释说明,具体操做请按《Windows 下 git 配置与使用指南》Wiki 执行。

相关文章
相关标签/搜索