• 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
    "
    }
    
    warn() {
    	printf "e[30;41m"
    	printf "$1"
    	printf "e[0m
    "
    }
    
    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命令全解析
    本博客由 BriFuture 原创,并在个人博客(WordPress构建) BriFuture's Blog 上发布。欢迎访问。
    欢迎遵照 CC-BY-NC-SA 协议规定转载,请在正文中标注并保留本人信息。
  • 相关阅读:
    sqlserver备份后无法还原的解决方法
    Silverlight如何与JS相互调用
    【转】体验 Silverlight 5 3D开发之环境搭配篇
    C#实现邮箱搬家功能(1):Pop3协议介绍
    【转】针对大数据量表的优化查询
    Centos7Docker安装Redis
    Centos7.*Consul安装配置
    Centos7Docker安装nacos
    Centos7Docker安装neo4j
    Spring框架根据传入参数动态的修改注解属性的值
  • 原文地址:https://www.cnblogs.com/brifuture/p/8341142.html
Copyright © 2020-2023  润新知