关于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.
原文地址:https://www.cnblogs.com/cidgur/p/8513627.html