钩子-如何让Git版本管理走向规范化

举报
莫妮卡 发表于 2020/04/23 16:39:43 2020/04/23
【摘要】 Git是一款开源的分布式版本控制系统,诞生于2002年,由Linux之父Linus Torvalds带领Linux开源社区开发完成,目前,被广泛的应用到企业代码管理中,是项目组成员协同开发的重要工具,但是,多人协作肯定会带来问题,比如,不规范的提交,误修改了核心文件,都是让项目管理者头疼的问题。本文介绍一个Git版本管理工具小功能——钩子,虽然不被经常提到,它却是一个规范流程的利器。


钩子的作用就是当某个特定事件发生时,触发一个特定的动作执行。钩子存放在代码仓库的.git/hooks下,初始化的代码仓库中会带有一些示例代码,它们以sample作为后缀,删除这个后缀,就可以激活了。脚本命名中,以pre-前缀开始的钩子通过约束条件决定是否让操作发生,而以post-前缀开始的钩子只能用于通知。.git/hooks下默认的脚本是用shell(#!/bin/sh)和perl(#!/usr/bin/perl)编写的,如果更熟悉其他语言,同样也可以用python等实现。


钩子使用场景举例(一):

需求:在开发跨平台项目的时候,使用非ACSII文件名会导致错误,比如文件系统编码不同导致fopen函数无法打开中文命名的文件。

实现:在开发人员将代码提交到本地仓库之前,检查提交的文件中是否包含非ACSII字符。

触发:git commit操作

默认pre-commit脚本:


①    获取本地仓库最新的提交索引HEAD

②    获取本地仓库配置信息,是否允许ACSII

    当本地配置文件不允许非ACSII字符,且暂存区新增文件命名包含非ACSII字符时,使git commit操作失败,给出错误提示。

如果想对修改的文件也同时进行约束,将—diff-filter=AM即可。


操作演示:

钩子使用场景举例(二):

需求:项目组希望提交信息合规,以便于通过提交信息直观了解提交内容。开发人员需要在每次提交时按照固定的格式书写message,如以【功能描述】【提交人】开头的描述信息。

实现:自动修改开发人员书写的message信息,使其合规。

触发:git commit操作

自定义commit-msg脚本:

操作演示:

钩子的作用范围

一个开发人员定义无法推送到远端服务器,因此,不能被其他成员克隆,可是说钩子是本地化的。如果组内想共享钩子,可以在仓库中创建一个.git文件夹之外的路径,用于保存和版本管理,不过这样做显然有点繁琐。

因此,很多远端仓库服务器也加入了推送约束,在华为云DevCloud的CodeHub中,可以看到每个仓库的设置界面,都可以进行条件配置,通过定义匹配的正则表达式管理推送的合规性。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。