zoukankan      html  css  js  c++  java
  • 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 协议规定转载,请在正文中标注并保留本人信息。
  • 相关阅读:
    Linux 系统目录 以及常见命令
    设计模式C++学习笔记之十三(Decorator装饰模式)
    设计模式C++学习笔记之二(Proxy代理模式)
    Linux 文件基本操作
    Linux 文件系统基本结构 以及命令行 管理
    Linux 入门 bash语句 第三课
    JMeter学习参数化User Defined Variables与User Parameters
    JMeter使用中遇到的问题:Jmeter Debug
    JMeter学习(九)FTP测试计划
    JMeter学习(八)JDBC测试计划-连接Oracle
  • 原文地址:https://www.cnblogs.com/brifuture/p/8341142.html
Copyright © 2011-2022 走看看