• 关于git 通过shell 获取流的参数


    前一段时间使用 Server 端 Git Hooks 的时候,需要获取 Git 提交的信息,这里对如何获取 Git 传递的参数 进行简单记录总结。

    git 通过传递参数 或者 标准输入流的形式传递提交的信息。

    获取参数信息

    git hooks 的 update 可执行文件 会在已经推送完成但是还没有更新到远程仓库的时候执行,这时候可以获得推送上来的数据内容,分析是否接受推送。

    git 会传递一下三个参数,接收方法如下:

    1
    2
    3
    4
    5
    #!/bin/sh

    refname="$1" # the name of the ref being updated,
    oldrev="$2" # the old object name stored in the ref,
    newrev="$3" # and the new object name to be stored in the ref.

    获取标准输入流信息

    git hooks 的 post-receive 可执行文件 会在整个推送周期完成后执行,一般用来进行事件通知。

    与 update 可执行文件 不同的是,git会以标准输入流的形式传递参数给post-receive文件,数据格式如下:

    1
    <old-value> SP <new-value> SP <ref-name> LF

    接收方法如下:

    1
    2
    3
    #!/bin/sh

    read oldValue newValue refName

    此处用三个变量接收标准输入流参数,如果参数超过三个,从第三个参数开始,后面所有的参数都会赋值给最后一个refName变量。

    获取返回的状态码

    可执行文件中如果遇到 exit <num> 会退出执行,git会获取退出的状态码,如果是0,则接受提交,否则拒绝提交。

    获取退出状态的方式是 $?,Java 中的 System.exit(0); 即是退出状态码。

    Bash 特殊变量总结

    变量含义
    $n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。
    例如,第一个参数是$1,第二个参数是$2,大于9的要写成 ${10}
    $? 上个命令的退出状态,或函数的返回值
    $# 传递给脚本或函数的参数个数
    $$ 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID
    $0 当前脚本的文件名
    $* 传递给脚本或函数的所有参数,所有参数以一个双引号包裹 "$1 $2 … $n"
    $@ 传递给脚本或函数的所有参数,每个参数都以双引号包裹 "$1" "$2" … "$n"
    $_ 上一个命令的最后一个参数
    $! 后执行的后台命令的进程ID
    Talk is cheap, show me the code.
  • 相关阅读:
    《ERP—从内部集成起步》目录
    你与开发高手的距离(转)
    《ERP从内部集成起步》读书笔记——第2章 从优化业务流程谈信息集成的必要性 2.2信息集成与实时共享 2.2.1信息孤岛割断了流程
    《ERP从内部集成起步》读书笔记——第2章 从优化业务流程谈信息集成的必要性 2.2信息集成与实时共享2.2.3信息集成的条件
    浴室里没有人水是我开的
    你的爱不离不弃
    找到你的幸福
    谁有选择谁就有痛苦
    “生态建筑”如何“生态”
    Kindness keep the world afloat
  • 原文地址:https://www.cnblogs.com/cidgur/p/8513627.html
Copyright © 2020-2023  润新知