大多数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. 解决执行maven项目出现 SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder”. error

    最近再弄maven项目,运行起来没有问题,但是Console控制台会报错,比如说如下的问题异常提示: 由此我们可以看出,报出错误的地方主要是slf4j的jar包,而故障码中“Failed to loa ...

  2. JavaScript设计模式系列学习笔记目录

    说明 本系列笔记参考书籍<JavaScript设计模式>.<JavaScript高级程序设计3> 参考博客:汤姆大叔博客:http://www.cnblogs.com/TomX ...

  3. [H5表单]一些html5表单知识及EventUtil对象完善

    紧接着上面的文章,一开始准备一篇文章搞定,后来看到,要总结的东西还不少,干脆,把上面文章拆成两部分吧,这部分主要讲讲表单知识! 表单知识 1.Html5的autofocus属性. 有个这个属性,我们不 ...

  4. js 获取 客户区 大小

    js 获取 客户区 大小 本文内容来自<javascript高级程序设计(第二版)> 内容, 只是方便大家以后可能会用到... <script type="text/jav ...

  5. [转]真正了解CSS3背景下的@font face规则

    本文转自:http://www.zhangxinxu.com/wordpress/2017/03/css3-font-face-src-local/ by zhangxinxu from http:/ ...

  6. WPF binding<一> Data Binding在WPF中的地位

    在代码中看到 <Image Source="{Binding ElementName=LBoxImages, Path=SelectedItem.Source}" /> ...

  7. 如何查找消耗资源较大的SQL

    对于优化来讲,查找消耗资源较大的SQL至关重要,下面介绍几个之前用到的SQL. 1.从V$SQLAREA中查询最占用资源的查询. select b.username username,a.disk_r ...

  8. spring security入门

    1. Restful API和传统API的区别 用URL描述资源 用http描述方法行为,用http状态码描述结果 使用json交互数据 RESTful是一种风格,不是强制的标准 2. 使用sprin ...

  9. webpack使用extract-text-webpack-plugin打包时提示错误Use Chunks.groupsIterable and filter by instanceof Entryp

    转自:https://blog.csdn.net/gezilan/article/details/80020417 前提条件: 当前时间是2018年4月20日. webpack的最新版本为是 v4.6 ...

  10. .net IoC 之 Spring.Net 适合刚开始使用

    Spring.Net包括控制反转(IoC) 和面向切面(AOP),这篇文章主要说下IoC方面的入门. 一.首先建立一个MVC项目名称叫SpringDemo,然后用NuGet下载spring(我用的是S ...