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

本文主要是介绍Git 系列之二:Windows 下 Git 客户端的选择,及 msysGit 各种中文问题的解决,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

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

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

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

选择:msysGit。
理由:
NBGit 不用说,功能都不完善,还需要自己定制 bat 脚本(若此,则它同样要依赖 msysGit);开发不活跃,很可能 NetBeans 下个版本更新就不能用了;况且,我们还有别的项目,不使用 NetBeans。

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

msysGit 的 Bash 非常好用;加上 Git 强大的 alias 功能,我们完全可以自定义一个 $ git go,使得 90% 的情况下只需要这一个命令,即使是不熟悉命令行的 Windows 用户也会觉得很好玩;因为 NBGit、TortoiseGit 都需要 msysGit 做底层,我们直接用底层工具也避免了上层 GUI 带来的额外的 bug。

需要的配置:

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

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

说明:使得在 Git Bash 中输入 ls 命令,可以正常显示中文文件名

2、C:\Program Files\Git\etc\inputrc:

set output-meta on
set convert-meta off

说明:使得在 Git Bash 中可以正常输入中文,比如中文的 commit log。

3、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,在选项里禁止分页,则无需设置上面的选项。

4、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 看自己的中文修订没问题,但,一、我们的 log 推到服务器后会变成乱码;二、别人在 Linux 下推的中文 log 我们 pull 过来之后看起来也是乱码。这是因为,我们的 commit log 会被先存放在项目的 .git/COMMIT_EDITMSG 文件中;在中文 Windows 里,新建文件用的是 GB2312 的编码;但是 Git 不知道,当成默认的 utf-8 的送出去了,所以就乱码了。有了这条之后,Git 会先将其转换成 utf-8,再发出去,于是就没问题了。

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

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

2、$ git diff,如果代码里有中文,会显示乱码;

3、$ git checkout 有时候需要修改/增删很多文件,如果某些文件被占用,会被 Windows 拒绝,导致失败,甚至可能造成版本库出现无法修复的问题。

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

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

这篇关于Git 系列之二:Windows 下 Git 客户端的选择,及 msysGit 各种中文问题的解决的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/175151

相关文章

Vue3绑定props默认值问题

《Vue3绑定props默认值问题》使用Vue3的defineProps配合TypeScript的interface定义props类型,并通过withDefaults设置默认值,使组件能安全访问传入的... 目录前言步骤步骤1:使用 defineProps 定义 Props步骤2:设置默认值总结前言使用T

504 Gateway Timeout网关超时的根源及完美解决方法

《504GatewayTimeout网关超时的根源及完美解决方法》在日常开发和运维过程中,504GatewayTimeout错误是常见的网络问题之一,尤其是在使用反向代理(如Nginx)或... 目录引言为什么会出现 504 错误?1. 探索 504 Gateway Timeout 错误的根源 1.1 后端

Web服务器-Nginx-高并发问题

《Web服务器-Nginx-高并发问题》Nginx通过事件驱动、I/O多路复用和异步非阻塞技术高效处理高并发,结合动静分离和限流策略,提升性能与稳定性... 目录前言一、架构1. 原生多进程架构2. 事件驱动模型3. IO多路复用4. 异步非阻塞 I/O5. Nginx高并发配置实战二、动静分离1. 职责2

解决升级JDK报错:module java.base does not“opens java.lang.reflect“to unnamed module问题

《解决升级JDK报错:modulejava.basedoesnot“opensjava.lang.reflect“tounnamedmodule问题》SpringBoot启动错误源于Jav... 目录问题描述原因分析解决方案总结问题描述启动sprintboot时报以下错误原因分析编程异js常是由Ja

深度剖析SpringBoot日志性能提升的原因与解决

《深度剖析SpringBoot日志性能提升的原因与解决》日志记录本该是辅助工具,却为何成了性能瓶颈,SpringBoot如何用代码彻底破解日志导致的高延迟问题,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言第一章:日志性能陷阱的底层原理1.1 日志级别的“双刃剑”效应1.2 同步日志的“吞吐量杀手”

MySQL 表空却 ibd 文件过大的问题及解决方法

《MySQL表空却ibd文件过大的问题及解决方法》本文给大家介绍MySQL表空却ibd文件过大的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录一、问题背景:表空却 “吃满” 磁盘的怪事二、问题复现:一步步编程还原异常场景1. 准备测试源表与数据

解决Nginx启动报错Job for nginx.service failed because the control process exited with error code问题

《解决Nginx启动报错Jobfornginx.servicefailedbecausethecontrolprocessexitedwitherrorcode问题》Nginx启... 目录一、报错如下二、解决原因三、解决方式总结一、报错如下Job for nginx.service failed bec

SysMain服务可以关吗? 解决SysMain服务导致的高CPU使用率问题

《SysMain服务可以关吗?解决SysMain服务导致的高CPU使用率问题》SysMain服务是超级预读取,该服务会记录您打开应用程序的模式,并预先将它们加载到内存中以节省时间,但它可能占用大量... 在使用电脑的过程中,CPU使用率居高不下是许多用户都遇到过的问题,其中名为SysMain的服务往往是罪魁

MySQ中出现幻读问题的解决过程

《MySQ中出现幻读问题的解决过程》文章解析MySQLInnoDB通过MVCC与间隙锁机制在可重复读隔离级别下解决幻读,确保事务一致性,同时指出性能影响及乐观锁等替代方案,帮助开发者优化数据库应用... 目录一、幻读的准确定义与核心特征幻读 vs 不可重复读二、mysql隔离级别深度解析各隔离级别的实现差异

C++ vector越界问题的完整解决方案

《C++vector越界问题的完整解决方案》在C++开发中,std::vector作为最常用的动态数组容器,其便捷性与性能优势使其成为处理可变长度数据的首选,然而,数组越界访问始终是威胁程序稳定性的... 目录引言一、vector越界的底层原理与危害1.1 越界访问的本质原因1.2 越界访问的实际危害二、基