git hook分支_devops| git hooks 实战: 防分支 merge-程序员宅基地

技术标签: git hook分支  

date: 2018-5-7 11:34:54

title: devops| git hooks 实战: 防分支 merge

description: 基于工作中 git 工作流遇到的问题, 实战 git hooks, 防止测试分支合并到开发分支

先推荐一本书, Pro Git>. 接触并使用 git 的过程中, 会不断积累一个又一个 git 命令, 一个又一个 git 知识点, 而这本书, 可以让学习到的 git 知识 连接 起来.

问题

项目切换到 git 后(再次重复一遍, 人生苦短, 快用 git), 效率大大提升, 需求和分支增长速度明显提高. 虽然切换到 git 之前进行过 技术讨论 协商了一套 git 工作流, 类似 git flow. 不过由于 节奏很快, 需求很多, 同时开发/测试的分支很多, 所以会有一个 rtest 分支, 作为集成测试使用.

问题在于 rtest 分支上可能有多个需求做集成测试, 所以这个分支不允许被合并到其他分支, 但是 git merge 合并反分支的情况时有发生.

git hooks

熟悉 github 可能听过 webhooks, 可以在 pull request / merge master 等几个场景下, 设置异步回调通知(http 请求). 这个背后就是 git hooks 在起作用.

git hooks 采用 事件机制, 在相应的操作(比如 git commit / git merge)下触发, 分为 2 种:

服务端 hooks, github 的 webhooks 就是在此基础上建立起来的

客户端 hooks, 每个 git 版本库的 .git/hooks/ 文件夹下就有可以使用的例子

注意: 客户端 hooks 并不会同步到版本库中

实战: 不允许分支合并

查看 git hooks 官方文档 可知, git merge 时会触发 commit-msg hook.

This hook is invoked by git commit and git merge, and can be bypassed with the --no-verify option. It takes a single parameter, the name of the file that holds the proposed commit log message. Exiting with a non-zero status causes the command to abort.

git 版本库在 .git/hooks/ 目录下都内置了几个常用 hooks 的示例, 比如 .git/hooks/commit-msg.sample:

#!/bin/sh

#

# An example hook script to check the commit log message.

# Called by "git commit" with one argument, the name of the file

# that has the commit message. The hook should exit with non-zero

# status after issuing an appropriate message if it wants to stop the

# commit. The hook is allowed to edit the commit message file.

#

# To enable this hook, rename this file to "commit-msg".

# Uncomment the below to add a Signed-off-by line to the message.

# Doing this in a hook is a bad idea in general, but the prepare-commit-msg

# hook is more suited to it.

#

# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')

# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"

# This example catches duplicate Signed-off-by lines.

test "" = "$(grep '^Signed-off-by: ' "$1" |

sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || {

echo >&2 Duplicate Signed-off-by lines.

exit 1

}

不允许合并 rtest 分支, 稍微修改一下 .git/hooks/commit-msg.sample 即可:

#!/c/bin/php/php

// var_dump($argv);

$str = file_get_contents($argv[1]);

// var_dump($str);

if (strpos($str, "Merge branch 'rtest'") !== false) {

echo "can not merge rtest \n";

exit(1);

}

// echo 'for test'; exit(2);

文件重命名为 commit-msg 即可生效, 执行效果如下:

git-hook-commit-msg

返回码不为 0 就会终止 git merge 命令的执行, 然后执行 git reset --hard head 即可撤销这次操作.

写在最后

除了使用 git hooks, 如果使用 gitlab, 也可以通过 gitlab 提供的 merge request, 减少发生此错误的情况.

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_29956903/article/details/112947529

智能推荐

消息事件系统(案例)-程序员宅基地

文章浏览阅读454次。消息事件系统在游戏开发中,客户端内部有一套自己的消息事件系统是很有必要的,它会极大的帮助代码解耦,同时很方便的对自定义的消息类型进行绑定事件和在适当的时候调用。概括来说,以下消息事件系统的原理大致是用一个hashtable来存储事件类型以及事件类型所对应的回调方法,这个回调方法可以添加多个,同时也可以在需要的地方删除一个或多个。如果读者有更好的做法或方案,欢迎在评论区留言。(注:该文章是本人根据姜雪伟老师所著的《unity3d实战核心技术详解》所写,仅作为一种消息事件系统的方案供感兴趣的童鞋参考和了_事件系统

【观察】研华科技:平台和生态“双轮驱动”,赋能智能制造转型升级-程序员宅基地

文章浏览阅读458次。申耀的科技观察读懂科技,赢取未来!最近一段时间以来,“新基建”成为社会各界关注的焦点,而纵观“新基建”发力的领域,几乎都与智能制造领域有着直接的关联。原因不难理解,“新基建”的本质就是在..._对研华公司的改善

基于MindMaster思维导图拆解Spring体系结构_mind master怎么拆分-程序员宅基地

文章浏览阅读139次。网盘链接:Spring体系结构拆解提取码:3306下载Spring Framework v5.1.0大致概观:参考自spring-framework-5.0.2.RELEASE\docs\spring-framework-reference\images\spring-overview.png:_mind master怎么拆分

Java实现微信网页授权-程序员宅基地

文章浏览阅读133次。2019独角兽企业重金招聘Python工程师标准>>> ..._使用weixin-java-common-4.4.9.b.jar进行网页授权

儿童节到了,你会让孩子将来当程序员吗?-程序员宅基地

文章浏览阅读178次。web前端教程用大白话,来讲编程儿童节到了,不但小孩欢天喜地,连身边的成年人都想来凑个热闹,发个朋友圈逗个红包,要点小礼物,童心未泯,感觉是全民过节的喜庆日子。作为程序员..._儿童想当程序员

如何使用OpenCV实现图像均衡???-程序员宅基地

文章浏览阅读437次。点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达我们已经练习了很多图像处理——操作图像(精确地说是图像矩阵)。为此,我们探索了图像的均衡方法,以便..._opencv 人脸光xian均衡

随便推点

【LSTM回归预测】基于经验模态分解结合主成分分析的长短记忆神经网络EMD-KPCA-LSTM(含LSTM和EMD-LSTM对比)实现风电数据预测附matlab代码-程序员宅基地

文章浏览阅读631次,点赞30次,收藏29次。风电作为一种可再生能源,其发电量受多种因素影响,具有较强的波动性和间歇性。准确预测风电数据对于提高电网稳定性和优化调度具有重要意义。本文提出了一种基于经验模态分解(EMD)结合主成分分析(KPCA)的长短记忆神经网络(LSTM)模型(EMD-KPCA-LSTM)用于风电数据预测。该模型首先利用 EMD 将原始风电数据分解为多个固有模态函数(IMF),然后采用 KPCA 对 IMF 进行降维处理,最后利用 LSTM 网络对降维后的数据进行预测。

python 提取mysql数据库数据到excel(xlwings-pymysql)_python msql 查询导出excel 模板表-程序员宅基地

文章浏览阅读3.1k次,点赞4次,收藏10次。python 拷贝数据库表格到excelimport pymysqlimport xlwings as xwclass Mysql(object): def __init__(self, database, user, passwrod, host="127.0.0.1", port=3306, charset="utf8"): self.conn = pymys..._python msql 查询导出excel 模板表

Ahahahahahahahaha codeforces#669A 思维好题_flash小游戏don't wake her-程序员宅基地

文章浏览阅读149次。Alexandra has an even-length array a, consisting of 0s and 1s. The elements of the array are enumerated from 1 to n. She wants to remove at most n2 elements (where n — length of array) in the way that alternating sum of the array will be equal 0 (i.e. a1−a_flash小游戏don't wake her

grid 实现卡片布局 以及单元格之间的颜色处理-程序员宅基地

文章浏览阅读1.2k次。原文链接: grid 实现卡片布局 以及单元格之间的颜色处理 ..._如何使gird布局的gap变颜色

LeetCode 700题 题解答案集合 Python_leetcode题解大全python下载-程序员宅基地

文章浏览阅读9.9w次,点赞225次,收藏1.7k次。2019.5.12更新至题号796,目前共有265题。2019.5.26更新至题号72, 目前共有347题。2019.6.16更新至题号70,目前共有382题。2019.7.7更新至题号5120,目前共有442题。2019.8.5更新至题号1147,目前共有502题。2019.9.6更新至题号288, 目前共有551题。2019.11.13更新至题号426,目前共有602题..._leetcode题解大全python下载

CSS预编译器三剑客(Sass、Less、Stylus)及PostCSS(AST、开发插件)-程序员宅基地

文章浏览阅读2.3k次,点赞3次,收藏9次。CSS预编译器三剑客(Sass、Less、Stylus)及PostCSS(AST、开发插件)文章目录CSS预编译器三剑客(Sass、Less、Stylus)及PostCSS(AST、开发插件)1. CSS预编译器三剑客(Sass、Less、Stylus)2. PostCSS总结:Sass、Less、Stylus比较引入变量Less中的变量,在声明中使用时,如果出现多次赋值的情况,其会取最后一次赋值的值Sass/Stylus中的变量,如果出现多次赋值的情况,其会取声明前面最近的一次赋值的_css预编译器

推荐文章

热门文章

相关标签