大多数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>"echoecho "Available subcommands are:"echo "hello <name>  Print out Hello World or Hello <name> (if provided)"
}
main() {if [ "$#" -lt 1 ]; then  //if the number of options is less than oneusage; exit 1filocal subcommand="$1"; shiftcase $subcommand in"-h"|"--help")usage; exit 0;;"-v"|"--version")version; exit 0;;esacexport WORKINGDIR=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")if [ ! -e "$WORKINGDIR/git-adamcodes-$subcommand" ]; thenusage; exit 1fisource "$WORKINGDIR/git-adamcodes-$subcommand"if [ ! type "cmd_$subcommand" ]; thenusage; exit 1ficmd_$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/shbranch=$1
test -z $branch && echo "branch required." 1>&2 && exit 1git 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/

转载于:https://www.cnblogs.com/kidsitcn/p/4743042.html

什么是git subcommand,如何创建git子命令?相关推荐

  1. git的项目创建和常用命令

    如果是第一次使用git,需要配置提交者的信息 git config user.name 你的目标用户名 git config user.email 你的目标邮箱名# 使用--global参数,配置全局 ...

  2. 一个 .git 目录,领悟 Git 的强大!

    Git 是一个强大的工具,但是使用起来却不是很友好.如果程序员们能够真正花时间去理解 Git 的构成,将会避免很多不必要的麻烦. 以下为译文: 初学 Git 就像一个不懂当地语言的人来到一个陌生的国家 ...

  3. 通过 .git 目录深入理解 Git!

    Git 是一个强大的工具,但是使用起来却不是很友好.如果程序员们能够真正花时间去理解 Git 的构成,将会避免很多不必要的麻烦. 作者 | Pierre de Wulf 译者 | 明明如月,责编 | ...

  4. git 阿善有用 git 的分支合并 冲突的解决

    今日内容:1) Git基本介绍2) Git安装操作3) 如何使用Git管理版本库操作4) 远程仓库: 码云5) 分支管理6) 在IDEA中如何git--- 一上午的时间7) 主题一: 访问咨询主题看板 ...

  5. 文盘Rust -- 子命令提示,提高用户体验

    作者: jiashiwen 原文来源: https://tidb.net/blog/ec09d93b 文盘Rust -- 子命令提示,提高用户体验 notice"Rust is a trad ...

  6. 文盘Rust——子命令提示,提高用户体验

    上次我们聊到 CLI 的领域交互模式.在领域交互模式中,可能存在多层次的子命令.在使用过程中如果全评记忆的话,命令少还好,多了真心记不住.频繁 --help 也是个很麻烦的事情.如果每次按 'tab' ...

  7. 【Git】在本地创建git库管理自己的代码

    1.创建本地库 git init . 新建库 git config --global user.email "hello@163.com" git config --global ...

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

    为什么80%的码农都做不了架构师?>>>    今天给我们自己的发布系统增加一个新建分支的功能,操作比较简单,但是使用php执行shell命令的时候总是无法push分支到远程,但是登 ...

  9. Windows下Git库的创建

    图形化 打开Git GUI 选择"创建新的版本库": 选择要创建的目录,单击"新建"后,即可完成对Git库的创建,创建完成后会出现如下界面: 并在Git仓库目录 ...

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

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

最新文章

  1. 数据蒋堂 | 报表工具的SQL植入风险
  2. JavaScript学习笔记五:变量、作用域和内存问题
  3. [转载]开源网管软件对比 - Nagios OpenNMS Zenoss
  4. 大专计算机单招有哪些,大专单招和统招的区别有哪些
  5. RAID重组和数据库数据的修复与验证
  6. selenium教程
  7. double 数组_寻找两个有序数组的中位数
  8. 刷新器-Java EE 7后端十大功能
  9. 宋体配置JAVA j2ee (一) 轻松入门
  10. mysql like 多个条件_千万级MySQL数据库这样建索引可以让你的数据库飞起来.........
  11. MySQL外键命名规范
  12. 使用wordpress_为什么我使用WordPress进行教育
  13. 计算机应用节能环保,计算机应用的节能环保问题研究
  14. 具有数据库依赖性的.NET Core应用程序的集成测试
  15. 一个销售精英拜访客户的6大绝招,胜过10次培训,实用!
  16. linux查看perl进程,如何找到挂起perl脚本(linux进程)的位置
  17. 约翰霍普金斯大学计算机博士收入,约翰霍普金斯大学计算机科学研究生项目详情!...
  18. 计算机教师道德模范事迹材料,优秀道德模范教师先进事迹材料
  19. void 和 void *区别(c++)
  20. 职业化形象与商务礼仪

热门文章

  1. js使用html5,JS使用H5实现图片预览功能
  2. php 抽象工厂模式,php设计模式(五)抽象工厂模式
  3. 查看已安装java插件_记录下eclipse下的插件安装,查看及删除方式
  4. spring是java ee框架吗,Java EE和Spring框架之间的区别
  5. ffmpeg 推流同时录像命令_使用FFmpeg将rtsp流摄像头视频转码为rtmp播放
  6. bcoma 应用程序发生错误_Golang 错误和异常处理(含生产环境下的解决方案)
  7. 前后端分离导出excel_Vue + .NetCore前后端分离的快速发开框架
  8. Mongodb 定时备份和恢复 1
  9. Laravel学习笔记之Demo1——URL生成和存储
  10. Nginx 读写分离详解