Git 设置 Hook
Git 设置 hook
Hook 就是钩子,在需要的时候调用,根据每个钩子脚本(函数)的返回值决定下一步的操作。
在使用 Git 的过程中,有时候需要定制 Git 以便满足实际的需求。
需求
在一个项目的管理中,需要有一个人负责项目的整体进度。这个人需要有同步 master 分支的权限,
同时为了避免其他人的代码会对 master 分支代码进行错误的操作,其他人不能上传自己本地的代码到服务
器上的 master 分支。
借助 Git 预设的钩子就可以实现这个目的。
思路
- 首先要启用服务器上的 Git 钩子。
在服务器上 Git 仓库的目录下,有个 hooks
子目录,这里面存放了一些以 .sample
结尾的脚本文件。把 .sample
后缀去掉就可以启用脚本了。
- 在服务器接收提交时调用钩子。
为了在接收提交时触发钩子,启用 Update
钩子。
- 对新版本的提交进行检测,符合要求的才允许合并到仓库中。
这里用到了 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:
Git 设置 Hook的更多相关文章
- git 利用hook 实现服务器自动更新代码
如何利用git的hook实现提交代码后自动更新? 因为个人开发经常需要提交代码,每次都需要连接服务器去pull代码,重启服务器就显得十分繁琐,因此github提供了一个时间钩子,用户push代码后可以 ...
- git 设置多项目实现多账号登陆
9:45 2015/11/18git 设置多项目时实现多账号用户登陆git config --global user.name "your_name" git config --g ...
- git pre-push hook
This article introduces git pre-push hook. Problem In Lean project, we use a modified version of Goo ...
- vscode git设置
vscode只能打开一下界面: 在setting.path增加git.path选项,再使用linux的方法配置路径,就是使用D:/../bin/git.exe而不是\\ 重启vscode,git设置即 ...
- cmd/git设置alias提高效率
cmd设置alias 在cmd或者git中有有些命令是比较长的,却需要频繁的使用,那么我们就可以设置alias来简化操作,无形中减少大量的宝贵时间,具体步骤如下. 第一步: 创建cmd_alias.b ...
- 转:git设置过滤忽略的文件或文件夹
from: https://www.cnblogs.com/foohack/p/4629255.html git设置过滤忽略的文件或文件夹 我们一般向代码仓库提交项目的时候,一般需要忽略编译生成的 ...
- git设置HTTP代理
git设置HTTP代理 设置HTTP代理 如果公司使用代理,git就需要设置代理才能克隆远程仓库 执行下面两条语句 git config --global http.proxy 10.167.32.1 ...
- git设置core.autocrlf
背景: 使用虚拟机共享windows文件夹,文件夹中用git clone 一个仓库.在linux下编辑文件,用git status发现几乎所有的文件都为修改状态. 原因: windows下和lin ...
- git 设置代理.
git 设置代理:(因为网络有时太慢,需要用到 ss 代理..) git config --global http.proxy http://127.0.0.1:1080 取消 代理 git conf ...
随机推荐
- c# 时间格式处理,获取格式: 2014-04-12T12:30:30+08:00
C# 时间格式处理,获取格式: 2014-04-12T12:30:30+08:00 一.获取格式: 2014-04-12T12:30:30+08:00 方案一:(局限性,当不是当前时间时不能使用) ...
- CHSpecialEffect(特效)
1.CALayer 动画 1.1 转场动画CALayer (Transition) 2.UIView效果 毛玻璃CHBlurEffect
- MongoDB入门,安装配置与基本CURD操作
MongoDB特点 MongoDB是NoSQL的一种,非关系型数据库,或者叫不只是关系型数据库(Not Only SQL).MongoDB采用json格式的文档存储,与Redis的key-value有 ...
- 【bzoj2434】: [Noi2011]阿狸的打字机 字符串-AC自动机-BIT
[bzoj2434]: [Noi2011]阿狸的打字机 x串在y串上的匹配次数就是y在自动机所有节点上能够通过fail走到x最后一个节点的个数 (就是y串任意一个前缀的后缀能匹配到x的个数)和[bzo ...
- 识别子串 (string)——后缀自动机+线段树
题目 [题目描述] 一般地,对于一个字符串 S,和 S 中第 $ i $ 个字符 x,定义子串 $ T=S(i.j) $ 为一个关于 x 的识别子申,当且仅当: 1.$ i \leq x \leq j ...
- 洛谷P3674 小清新人渣的本愿(莫队)
传送门 由乃tql…… 然后抄了一波zcy大佬的题解 我们考虑把询问给离线,用莫队做 然后用bitset维护,每一位代表每一个数字是否存在,记为$now1$ 然后再记录一个$now1$的反串$now2 ...
- python web开发之flask框架学习(2) 加载模版
上次学习了flask的helloword项目的创建,这次来学习flask项目的模版加载: 第一步:创建一个flask项目 第二步:在项目目录的templates文件夹下创建一个html文件 第三步: ...
- SEVERE: One or more listeners failed to start.
Full details will be found in the appropriate container log file 错误日志在/home/dela/.IntelliJIdea2017.1 ...
- 勤哲excel服务器开发外贸行业薪资考核系统
以外销为驱动的订单行业,外贸业务员的素质直接决定公司效益.然而,大多数外贸公司或以外贸为主的工厂,经常面临外贸业务人员流动性频繁的问题,易 导致客户流失及跟单的困难.科学合理的与业绩挂钩的薪资考核,可 ...
- 直播点赞,上升的动画-- CAKeyFrameAnimation
// // ViewController.m // DMHeartFlyAnimation // // Created by Rick on 16/3/9. // Copyright © 20 ...