giv*_*nse 39
git hook是放置在存储库的特殊位置的脚本,该位置是:
的.git /钩
脚本可以是您可以在您的环境中执行的任何类型,例如bash,python,ruby等.
......钩子有三个参数......
例:
创建钩子(脚本):
touch .git/hooks/post-checkout
chmod u+x .git/hooks/post-checkout
Run Code Online (Sandbox Code Playgroud)钩子样本内容:
#!/bin/bash
set -e
printf '\npost-checkout hook\n\n'
prevHEAD=$1
newHEAD=$2
checkoutType=$3
[[ $checkoutType == 1 ]] && checkoutType='branch' ||
checkoutType='file' ;
echo 'Checkout type: '$checkoutType
echo ' prev HEAD: '`git name-rev --name-only $prevHEAD`
echo ' new HEAD: '`git name-rev --name-only $newHEAD`
Run Code Online (Sandbox Code Playgroud)
注意:第一行中的shebang表示脚本的类型.
这个脚本(git hook)只捕获传递的三个参数,并以人性化的格式打印它们.
Spl*_*iFF 33
如果其中一个钩子不能做到这一点,我会感到惊讶:
https://schacon.github.io/git/githooks.html
也许这一个:
后结账
在更新工作树之后运行git-checkout时调用此挂钩.钩子被赋予三个参数:前一个HEAD的ref,新HEAD的ref(可能已经或可能没有改变),以及一个标志,指示结账是否是分支结账(更改分支,标志= 1)或文件签出(从索引中检索文件,标志= 0).这个钩子不会影响git-checkout的结果.
与其他人类似,但验证分支已经签出一次.
#!/bin/bash
# this is a file checkout – do nothing
if [ "$3" == "0" ]; then exit; fi
BRANCH_NAME=$(git symbolic-ref --short -q HEAD)
NUM_CHECKOUTS=`git reflog --date=local | grep -o ${BRANCH_NAME} | wc -l`
#if the refs of the previous and new heads are the same
#AND the number of checkouts equals one, a new branch has been created
if [ "$1" == "$2" ] && [ ${NUM_CHECKOUTS} -eq 1 ]; then
git push origin ${BRANCH_NAME}
fi
Run Code Online (Sandbox Code Playgroud)
该post-checkout 钩接收三个参数:
0) 还是分支检出 ( 1)您可以使用这样一个事实,即从当前 HEAD 创建的分支对于参数 1 和 2 具有相同的值。
cat > .git/hooks/post-checkout <<"EOF"
if [ "$3" == "0" ]; then exit; fi
if [ "$1" == "$2" ]; then
echo "New branch created. (Probably)."
fi
EOF
chmod u+x .git/hooks/post-checkout
Run Code Online (Sandbox Code Playgroud)
限制: