git hook实现锁库锁分支操作
往往在使用git的时候,会有个隐藏文件夹 .git,这里面就平常的git管控,其中有一项hook钩子,里面会带有一些示例脚本,默认情况下并不会采用它,如果把后缀.sample去掉,它就会生效;
在锁库的时候我们可以使用其中一个脚本update;
首先,一般情况下,我们是在服务器电脑上建立裸仓库 git init --bare xxx.git,意思是只是裸仓库,不能直接在这个仓库下建立新分支、文件及文件夹,而且分支也不会显示正式的master,显示如下:
然后我们会在客户端git clone裸仓库下来,然后在里面建立分支,添加文件,然后推送到远程裸仓库中;
然而我们在客户端推送代码的时候,远程裸仓库中会执行update脚本(如果使用了该脚本),因此我们可以从这个裸分为的脚本入手(客户端下的脚本不用去处理),做一些限制条件,比如锁库、锁分支等;我们现在可以看下这个文件,如下
这个脚本文件咱们可以看到前面有三个传入的参数,第一个是分支名称、第二个当前节点,第三个是新节点,咱们也可以在脚本里面用echo打印出来;其中分支名称就是我们要用到的,假如说,我们判断一下分支的名称,脚本如下:
if [[ $refname == "refs/heads/branch535_t" ]]
then
echo "You cannot push to branch535_t! It's locked"
exit 1
else
echo "refname:$refname"
echo "oldrev:$oldrev"
echo "newrev:$newrev"
fi
这样咱们就能实现对该分支进行锁定,注意分支的名称是带refs/heads/ 也可以做个过滤条件;
另外hook下的脚本编写规范也可以使用其他语言编写,比如python,