Git 设置 Hook

Git 设置 hook

Hook 就是钩子,在需要的时候调用,根据每个钩子脚本(函数)的返回值决定下一步的操作。

在使用 Git 的过程中,有时候需要定制 Git 以便满足实际的需求。

需求

在一个项目的管理中,需要有一个人负责项目的整体进度。这个人需要有同步 master 分支的权限,
同时为了避免其他人的代码会对 master 分支代码进行错误的操作,其他人不能上传自己本地的代码到服务
器上的 master 分支。

借助 Git 预设的钩子就可以实现这个目的。

思路

  1. 首先要启用服务器上的 Git 钩子。

在服务器上 Git 仓库的目录下,有个 hooks 子目录,这里面存放了一些以 .sample 结尾的脚本文件。把 .sample 后缀去掉就可以启用脚本了。

  1. 在服务器接收提交时调用钩子。

为了在接收提交时触发钩子,启用 Update 钩子。

  1. 对新版本的提交进行检测,符合要求的才允许合并到仓库中。

这里用到了 git log 获得最新提交的用户,尽管这里得到的用户名可能并不是真实的(客户端可以对用户名进行修改),
但一般情况下已经足够阻止不符合要求的提交了。
最后,对于符合要求的提交,脚本返回 0 表示可以接收这次提交,而返回 1 则相反。

代码

#!/bin/bash

refname=$1
oldrev=$2
newrev=$3
user=$USER


permit=0  # false
author=`git log ${newrev} -1 --pretty="%an"`

info() {
    printf "\e[30;42m"
    printf "$1"
    printf "\e[0m\n"
}

warn() {
    printf "\e[30;41m"
    printf "$1"
    printf "\e[0m\n"
}

echo "Enforcing Policiese..."
echo "($refname) (${oldrev:0:6}) (${newrev:0:6})"

# echo "$( g )"
if [ "${refname##refs/heads/}" = "master" ]; then
    warn 'You are pushing repository into Master branch! Make sure you have proper permission. '
    if [ "$author" = 'BriFuture' ]; then
        permit=1   # true
    fi
else
    permit=1  # true
fi

if [ $permit -eq 1 ]; then
    info "Hi $author! Remote is updating repository..."
    exit 0
else
    warn "Hi $author, you are not authorized to push into Branch MASTER! Check your local branch and push command!"
    exit 1
fi

Reference:

  1. Git - Git挂钩
  2. git log命令全解析

转载于:https://www.cnblogs.com/brifuture/p/8341142.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值