git hook 的无限畅想与简单落地总结

和其它版本控制系统一样,Git 能在特定的重要动作发生时触发自定义脚本。 有两组这样的钩子:客户端的和服务器端的。 客户端钩子由诸如提交和合并这样的操作所调用,而服务器端钩子作用于诸如接收被推送的提交这样的联网操作。 你可以随心所欲地运用这些钩子。

钩子都被存储在 Git 目录下的 hooks 子目录中。 也即绝大部分项目中的 .git/hooks ,默认存在的都是示例,其名字都是以 .sample 结尾,如果你想启用它们,得先移除这个后缀。把一个正确命名且可执行的文件放入 Git 目录下的 hooks 子目录中,即可激活该钩子脚本。 这样一来,它就能被 Git 调用。

关于各种详细的 hook 类型可以参考官方文档《自定义 Git - Git 钩子》。

了解了这些 hook 钩子,你就可以真的为所欲为了,你可以用来检查消息、检查代码,可以用来触发任意流程,譬如自动规范检查等等,只能说想象空间巨大无比。

commit msg 格式自动检查实战


虽然有很多现成的 hook 可用,但是这里还是给出一个简单的例子演示下,这里实现一个提交 message 格式的简单检查,要求提交消息单行且分两部分,且有一定的字数限制(实际你可以任意 YY 规则)。

编写 commit-msg 脚本

#!/usr/bin/env python

coding=utf-8

commit msg check

import sys

import re

import io

if hasattr(sys.stdout, ‘buffer’):

sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding=‘utf-8’)

TIPS_INFO = ‘’’

不符合commit规范,提交失败(当前状态等于没做刚刚的commit操作)!

commit规范:

类型 详细消息

规范样例:

git commit -m “xxxxx xxxxxxxxxxxxx”

!!!!提交失败!!!!

‘’’

def check_commit_line1_format(msg):

regOther = r’\S{5,} (.){10,100}’

matchObj = re.match(regOther, msg)

return matchObj

if name==“main”:

with open(sys.argv[1], ‘r’) as f:

for line in f:

if (check_commit_line1_format(line)):

sys.exit(0)

else:

print(TIPS_INFO)

sys.exit(1)

既然编写好了 commit hook 脚本,那新问题就来了,本地 hook 在项目的.git目录下,.git目录又不受版本控制,所以在团队推广时,你不可能让大家主动去放这个文件,一方面可能会放错,另一方面可能有些人压根就不放,爱理不理,故而需要将这件事做成自动的,所以选择在编译项目时为拷贝切入点(因为你拽下来的项目一定会编译的)。对于 android 项目来说,我们可以使用 gradle 编写一个小任务来做这件事,具体如下:

/**

  • 用法:

  • apply from: ‘git-hook-copy.gradle’

*/

/**

  • 紧急开关

*/

def forbid = false

project.afterEvaluate {

if (forbid) {

preBuild.dependsOn ‘resetGitHookConfig’

} else {

preBuild.dependsOn ‘prepareGitHookConfig’

}

}

task prepareGitHookConfig(type: Copy) {

from getConfigFile()

into getGitHookDir()

}

task resetGitHookConfig {

doFirst {

File file = getGitHookFile(‘commit-msg’)

if (file != null) {

file.delete()

}

}

}

def getGitHookFile(fileName) {

def dirPath = getGitHookDir()

if (dirPath != null && dirPath.length() > 0) {

def file = new File(dirPath, fileName)

if (file.exists()) {

return file

}

}

return null

}

def getConfigFile() {

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

最后

都说三年是程序员的一个坎,能否晋升或者提高自己的核心竞争力,这几年就十分关键。

技术发展的这么快,从哪些方面开始学习,才能达到高级工程师水平,最后进阶到Android架构师/技术专家?我总结了这 5大块;

我搜集整理过这几年阿里,以及腾讯,字节跳动,华为,小米等公司的面试题,把面试的要求和技术点梳理成一份大而全的“ Android架构师”面试 Xmind(实际上比预期多花了不少精力),包含知识脉络 + 分支细节。

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。

2021年虽然路途坎坷,都在说Android要没落,但是,不要慌,做自己的计划,学自己的习,竞争无处不在,每个行业都是如此。相信自己,没有做不到的,只有想不到的。祝大家2021年万事大吉。

《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!

深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。

2021年虽然路途坎坷,都在说Android要没落,但是,不要慌,做自己的计划,学自己的习,竞争无处不在,每个行业都是如此。相信自己,没有做不到的,只有想不到的。祝大家2021年万事大吉。

《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!
  • 11
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值