和其它版本控制系统一样,Git 能在特定的重要动作发生时触发自定义脚本。 有两组这样的钩子:客户端的和服务器端的。 客户端钩子由诸如提交和合并这样的操作所调用,而服务器端钩子作用于诸如接收被推送的提交这样的联网操作。 你可以随心所欲地运用这些钩子。
钩子都被存储在 Git 目录下的 hooks
子目录中。 也即绝大部分项目中的 .git/hooks
,默认存在的都是示例,其名字都是以 .sample
结尾,如果你想启用它们,得先移除这个后缀。把一个正确命名且可执行的文件放入 Git 目录下的 hooks
子目录中,即可激活该钩子脚本。 这样一来,它就能被 Git 调用。
关于各种详细的 hook 类型可以参考官方文档《自定义 Git - Git 钩子》。
了解了这些 hook 钩子,你就可以真的为所欲为了,你可以用来检查消息、检查代码,可以用来触发任意流程,譬如自动规范检查等等,只能说想象空间巨大无比。
虽然有很多现成的 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移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)
![](https://i-blog.csdnimg.cn/blog_migrate/83347d2a401418e2559e08d85f0bd0d5.jpeg)
最后
都说三年是程序员的一个坎,能否晋升或者提高自己的核心竞争力,这几年就十分关键。
技术发展的这么快,从哪些方面开始学习,才能达到高级工程师水平,最后进阶到Android架构师/技术专家?我总结了这 5大块;
我搜集整理过这几年阿里,以及腾讯,字节跳动,华为,小米等公司的面试题,把面试的要求和技术点梳理成一份大而全的“ Android架构师”面试 Xmind(实际上比预期多花了不少精力),包含知识脉络 + 分支细节。
网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。
2021年虽然路途坎坷,都在说Android要没落,但是,不要慌,做自己的计划,学自己的习,竞争无处不在,每个行业都是如此。相信自己,没有做不到的,只有想不到的。祝大家2021年万事大吉。
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!
深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。
2021年虽然路途坎坷,都在说Android要没落,但是,不要慌,做自己的计划,学自己的习,竞争无处不在,每个行业都是如此。相信自己,没有做不到的,只有想不到的。祝大家2021年万事大吉。