如何通过别名扩展 Git
前置知识
如果你想要写出好用的 Git 扩展,你可能需要对以下知识有一些了解,如果你仅仅想要阅读以下这一篇博文,现在没有这一些知识也不是很重要,这篇文章知识给你提供一个 git 增强的思路,并不会涉及太多 shell、git 工作流、makefile 等知识;
写好一个 git 扩展你可能需要的知识
-
首先你需要熟悉 git 的基本操作,这是必须的。另外在这基础上,还希望你对 git 的一些基础知识有一些了解、比如分支的本质、提交的流程、物件/组件、git 的配置文件(这个很重要)、以及文件等管理等,这一类知识你可以在 git 的官方文档上找到;
-
shell 或者 bash 编程,在编写扩展等时候或多或少是需要使用到脚本的,一般情况下是 sh。当然了 git 也是允许你使用其他脚本执行的,这意味着你可以使用你自己熟悉的编程语言来编写的(如果支持操作本地资源的话),这一类的资源我看过好一些资源站点好像都不是特别齐全,总是差一些点东西;相对比较推荐的是阮一峰的
-
git 分支管理模型,这会对你编写 git 扩展起到指引性的作用;
-
makefile,如果你使用一些更为低级或者是想自动化的编译你可能需要它来进行辅助
如何扩展
我们一般可以通过自定义自命令(subCommand)、alias 这两种情况来进行扩展 git,我们这里讲的主要以增加别名 alias 的方式来实现;
自定义子命令
这个主要是利用了 git 的脚本命令规范来实现的,你可以将你的脚本以 git-subcommand 的方式进行命名,然后将脚本文件 link 或者拷贝到 /usr/local/bin 或者是将脚本文件 $PATH 到环境下,然后使用 git subcommand 的方式就可以调用到你的自定义脚本了;
举个例子:假如我编写了一个 git-update.sh 的脚本,然后使用拷贝到 git 脚本所在的目录下,使用的时候只需要执行 git update;
这样的方式扩展,你可以在所有的地方都可以使用到,如 TJ 的编写的 git-extras
增加 alias 方式
关于增加别名的方式可以按照系统、全局、本地等来分,对应即是 git 中的几个配置文件,我这里主要讲解项目级别的扩展;
-
如果你不想使用自定义文件,你可以切到自己的项目下面,执行 git 的增加扩展命令,注意你不需要增加任何的制定文件的操作符(–global、–system 等),下面在项目级别增加一个 co 别名,运行 git co 其实是运行的 git checkout,甚至你还可以在里面编写 bash 脚本(第二个脚本);
这种方式增加的文件是 .git/config
文件;
git config alias.co 'checkout' # git co -> git checkout git config alias.sayHi '!f(){ echo sayHi }; f' # git sayHi -> "sayHi
-
使用自定义文件,在实际开发中 .git 其实是非常重要的,也一般情况下是隐藏的,如果不注意很可能造成 git 档案的丢失,所以我们还可以在项目下通过增加自定义文件来进行扩展(虽然本质上还是扩展 .git/config,但不容易出问题);
-
在项目根目录新建一个
.gitrc
的文件(没有扩展名),文件名叫什么真的不重要,不过建议你以.git
开头,我使用过 .gitalias .gitconfig 等
-
执行 sh 也是非常简单的,将后面的执行命令更改为对应执行 sh 的文件即可,那么 sh 文件中你可以随意编写你自己的脚本文件了,如下是 git rebase 合并的脚本
-
在项目下运行 `git config include.path ../.gitrc` 将命令注入到 .git/config 文件中
-
运行 git so 即可执行对于的命令
基本实践
请忽略我命令行中的中文提示,这是我这边命令行工具的问题;
-
交互式的 git push
基本 rebase 案例
本文文字及图片出自 InfoQ
共有 1 条讨论