大多数git用户知道如何在git中创建一个alias以便更便利地使用相关命令。很少有人知道至少不会好好利用的是:你实际上可以为Git创建扩展或者plugin,以便上git完成任何你希望完成的工作。这就是Git subcommand!

  应该如何创建git子命令呢?

1.创建一个shell或者bash脚本来完成你希望它做的工作;

2.将你的脚本文件命名为git-name,这样name就将成为git name中的子命令了!

3.将该脚本放到/usr/local/bin或其他任何$PATH指定的路径中;

4.运行git name命令调用上述脚本

通过上述方法虽然可以创建多个脚本文件来完成一个个小的功能扩展,但是一旦功能变多,则会显得混乱。一个比较好的组织sub command所完成任务的方式是可以将一堆工作脚本通过一个wrapper脚本来整合:

1.创建一个wrapper或者access point

2.为你希望执行的每一个子命令创建一个file/script

3.使用你的wrapper来加载并且运行你的sub-command scripts;

#!/usr/bin/env sh
version() {
echo "adamcodes git plugin v0.1.0"
echo
}
usage() {
echo "usage: git adamcodes <subcommand>"
echo
echo "Available subcommands are:"
echo "hello <name> Print out Hello World or Hello <name> (if provided)"
}
main() {
if [ "$#" -lt ]; then //if the number of options is less than one
usage; exit
fi local subcommand="$1"; shift case $subcommand in
"-h"|"--help")
usage; exit
;;
"-v"|"--version")
version; exit
;;
esac export WORKINGDIR=$(dirname "$(echo "$" | sed -e 's,\\,/,g')")
if [ ! -e "$WORKINGDIR/git-adamcodes-$subcommand" ]; then
usage; exit
fi source "$WORKINGDIR/git-adamcodes-$subcommand" if [ ! type "cmd_$subcommand" ]; then
usage; exit
fi cmd_$subcommand "$@"
}

上面内容可以参考: https://adamcod.es/2013/07/12/how-to-create-git-plugin.html

https://adamcod.es/2013/07/19/how-to-create-git-plugin-part2.html

git 子命令在release管理中的应用案例:

在网站的release管理中,可能现在实用的是这样一个流程:

git checkout master
git merge target_branch
git push origin master
git push origin :target_branch

或许你希望通过子命令简化一下上述流程为:

git checkout master
git validate target_branch

这个可以通过创建一个git-validate的脚本文件来实现:

#!/bin/sh

branch=$
test -z $branch && echo "branch required." >& && exit git checkout master
git merge $branch
git push origin master
git push origin :$branch

注意:为了实现一个git 子命令,我们并不一定被局限于使用shell脚本来编写代码哦,你可以使用其他比如Ruby,python等更强大的语言来实现@!

http://www.davidlaing.com/2012/09/19/customise-your-gitattributes-to-become-a-git-ninja/

http://blogs.atlassian.com/2013/04/extending-git/

什么是git subcommand,如何创建git子命令?的更多相关文章

  1. [git 学习篇] --创建git创库

    http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013743256916071d ...

  2. git 分支的创建、合并、删除

          基本概念与命令 分支(branch):每次提交,Git都把提交的内容串成一条时间线,这条时间线就是一个分支 .   git 分支的创建 git branch branchName git ...

  3. 创建Git本地仓库

    一.获取Git仓库 安装好Git后即可创建Git本地仓库,开始项目的版本管理.有两种方法取得Git项目仓库:1.在现有项目或目录下导入所有文件到Git中:2.从一个服务器克隆一个现有的Git仓库. 1 ...

  4. 【Git】3、创建Git版本库、配置Git仓库用户邮箱信息

    初识Git 文章目录 初识Git 1.创建Git版本库 认识.git 2.基础配置 2.1.查看配置信息 2.2.配置昵称邮箱信息 2.3.修改配置信息 1.通过命令行 2.通过修改配置文件. 修改全 ...

  5. Git(三)Git的远程仓库

    一. 添加远程库 现在我们已经在本地创建了一个Git仓库,又想让其他人来协作开发,此时就可以把本地仓库同步到远程仓库,同时还增加了本地仓库的一个备份.常用的远程仓库就是github:https://g ...

  6. git(二):一些简单入门命令

    一.创建仓储(版本库) 可以创建在空目录下创建git仓库,也可以在已有项目里创建git仓储. $ mkdir NewName //仓储名 $ cd Newname //进入到该仓储目录中 $ git ...

  7. 如何在Linux下使用Gitblit工具创建Git仓库服务

    嗨!朋友,今天我们将学习如何在你的Linux服务器或者PC上安装Gitblit工具.首先,我们看看什么是Git,它的功能以及安装Gitblit的步骤.Git是分布式版本控制系统,它强调速度.数据一致性 ...

  8. php 通过exec 创建git分支失败

    今天给我们自己的发布系统增加一个新建分支的功能,操作比较简单,但是使用php执行shell命令的时候总是无法push分支到远程,但是登陆服务器执行却是可以的 新建分支命令如下 git fetch -- ...

  9. git在本地创建远程仓库

    类似的博文,在前面的帖子里面也提到过,当时讲述的是一个入门级别的.其URL是ssh://username@repo-host-address/repo-path这种格式. 今天再说说如何创建类似Git ...

随机推荐

  1. Python编程中报过的错

    一.TypeError: not all arguments converted during string formatting def max(*args): print('max2:%s' % ...

  2. 配置mybatis解决log4j未正常打印sql的问题

    在mybatis-config.xml中增加配置: <settings> <setting name="logImpl" value="STDOUT_L ...

  3. java BufferedImage 合成多张图片 - 因为JPEGImageEncoder 不能用

    java BufferedImage 合成多张图片 public void createPicTwo2(int x,int y) {     try     {       //读取第一张图片    ...

  4. input标签的按钮效果

    https://codepen.io/anon/pen/EOPMNy <div class="row"> <p>Click every input.< ...

  5. 【C语言】-指向一维数组元素的指针

    本文目录 一.用指针指向一维数组的元素 二.用指针遍历数组元素 三.指针与数组的总结 四.数组.指针与函数参数 说明:这个C语言专题,是学习iOS开发的前奏.也为了让有面向对象语言开发经验的程序员,能 ...

  6. 【随笔】 MyEclipse2014的安装和破解

    MyEclipse,是在eclipse 基础上加上了自己的插件.MyEclipse,是在eclipse 基础上加上自己的插件开发而成的功能强大的企业级集成开发环境,主要用于Java.Java EE以及 ...

  7. input输入提示历史记录

    一般便于用户的输入习惯,我们都会提示历史消息,让用户有更好的使用体验,以前可能比较多朋友会用js来实现,现在HTML5的datalist可以轻松帮我们实现这个功能!只需以下几行代码 <!doct ...

  8. 使用 Qt 获取 UDP 数据并显示成图片

    一个项目,要接收 UDP 数据包,解析并获取其中的数据,主要根据解析出来的行号和序号将数据拼接起来,然后将拼接起来的数据(最重要的数据是 R.G.B 三个通道的像素值)显示在窗口中.考虑到每秒钟要接收 ...

  9. 【转】HttpWebRequest 保持session

    通过HttpWebRequest获取网页内容并保持session,最主要的就是存储cookie.这里使用了一个静态变量m_Cookie用来存储cookie的内容.第二次请求网页的时候把cookie传送 ...

  10. yum -y update 报错:GPG key retrieval failed: [Errno 14] Could not open/read file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5

    用的是centos6.5的镜像,yum源太老了,修改了之后想更新一下: yum -y update 执行报错: warning: rpmts_HdrFromFdno: Header V3 RSA/SH ...