zoukankan      html  css  js  c++  java
  • 关于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.
  • 相关阅读:
    select/poll/epoll 对比
    I/O Mutiplexing poll 和 epoll
    Socket 编程IO Multiplexing
    ubuntu12.04 lts 安装gcc 4.8
    time since epoch
    ceph-RGW Jewel版新概念
    支持向量机(svm)
    MachineLearning之Logistic回归
    ML之回归
    ML之监督学习算法之分类算法一 ——— 决策树算法
  • 原文地址:https://www.cnblogs.com/cidgur/p/8513627.html
Copyright © 2011-2022 走看看