钩子类型

使用node编写githook,以pre-commit为例:

1.在项目下配置自动生成pre-commit文件,一般可以在启动项目的脚本下添加:

modifyPreCommit: function () {
if (!fse.existsSync('.git')) {
console.log('该项目下没有git配置');
return;
}
if (!fse.existsSync('.git/hooks')) { // 没有hooks文件,sourceTree拉下来的代码会出现这种情况
fs.mkdirSync(`.git/hooks`);
}
if (!fse.existsSync('.git/hooks/pre-commit')) { // 没有pre-commit,创建该文件并且添加checkVer,如果有该文件不进行操作,以免覆盖原有的设置
fse.ensureFileSync('.git/hooks/pre-commit');
fs.readFile(path.resolve(__dirname, './addPreCommit'), function (err, data) {
if (err) {
console.log(err);
return;
}
const str = data.toString();
fs.writeFile('.git/hooks/pre-commit', str, function (err) {
if (err) {
console.log(err);
return;
}
console.log('git pre-commit配置成功!');
cp.exec('chmod 777 .git/hooks/pre-commit');
});
});
}
}

2.添加被拷贝的addPreCommit(此步骤可以兼容sourceTree的使用):

#!/usr/bin/env bash
# 支持 sourcetree
export PATH=/usr/local/bin:$PATH
node "./config/githook/pre-commit.js"

3.添加校验pre-commit.js(以校验冲突为例):

const execSync = require('child_process').execSync;
const isConflictRegular = '\<\<\<\<\<\<\< HEAD';
let results; try {
// git grep 命令会执行 perl 的正则匹配所有满足冲突条件的文件
results = execSync(`git grep -n "${isConflictRegular}"`, { encoding: 'utf-8' });
results = results.trim();
} catch (e) {
results = '';
}
if(results!== '') {
console.log('提交的文件中有冲突:');
console.log(results);
process.exit(1);
} else {
process.exit(0);
}

ps:这样的提示比较苍白,可以引用colors更直观~

 

【xinsir】githook之precommit分享的更多相关文章

  1. 【xinsir】分享一个查找文件的脚手架

    program.command('find <name>').action(name => { if (name) { inquirer .prompt([ { type: 'inp ...

  2. 《Node.js在CLI下的工程化体系实践》成都OSC源创汇分享总结

    背景: 随着开发团队规模不断发展壮大,在人员增加的同时也带来了协作成本的增加,业务项目越来越多,类型也各不相同.常见的类型有组件类.活动类.基于React+redux的业务项目.RN项目.Node.j ...

  3. pre-commit 钩子,代码质量检查:在 vue-cli 3.x 版本中,已经使用尤大改写的yorkie,yorkie实际是fork husky,然后做了一些定制化的改动,使得钩子能从package.json的 "gitHooks"属性中读取

    pre-commit 钩子,代码质量检查:在 vue-cli 3.x 版本中,已经使用尤大改写的yorkie,yorkie实际是fork husky,然后做了一些定制化的改动,使得钩子能从packag ...

  4. 《Node.js在CLI下的工程化体系实践》成都OSC源创会分享总结

    背景: 随着开发团队规模不断发展壮大,在人员增加的同时也带来了协作成本的增加,业务项目越来越多,类型也各不相同.常见的类型有组件类.活动类.基于React+redux的业务项目.RN项目.Node.j ...

  5. iOS “[App] if we're in the real pre-commit handler we can't actually add any new fences due

    最近运行APP,发现了这个问题,本着宁可错看,不可放过的原则,上stackoverFlow学习了一下: 链接:http://stackoverflow.com/questions/38458170/i ...

  6. GitHook 工具 —— husky介绍及使用

    名称 githooks-Git使用的挂钩.(githook在官网的介绍) 描述 如同其他许多的版本控制系统一样,Git 也具有在特定事件发生之前或之后执行特定脚本代码功能(从概念上类比,就与监听事件. ...

  7. .net点选验证码实现思路分享

    哈哈好久没冒泡了,最进看见点选验证码有点意思,所以想自己写一个. 先上效果图 如果你被这个效果吸引了就请继续看下去. 贴代码前先说点思路: 1.要有一个汉字库,并按字形分类.(我在数据库里是安部首分类 ...

  8. Hangfire项目实践分享

    Hangfire项目实践分享 目录 Hangfire项目实践分享 目录 什么是Hangfire Hangfire基础 基于队列的任务处理(Fire-and-forget jobs) 延迟任务执行(De ...

  9. 【分享】标准springMVC+mybatis项目maven搭建最精简教程

    文章由来:公司有个实习同学需要做毕业设计,不会搭建环境,我就代劳了,顺便分享给刚入门的小伙伴,我是自学的JAVA,所以我懂的.... (大图直接观看显示很模糊,请在图片上点击右键然后在新窗口打开看) ...

随机推荐

  1. Codeforces Round #424 (Div. 2, rated, based on VK Cup Finals) - B

    题目链接:http://codeforces.com/contest/831/problem/B 题意:给第2个26个字母并不重复的字符串(2个字符串对于一个映射),第1个字符串为key集合,第2个字 ...

  2. 03scikit-learn非监督学习

    In [1]: from sklearn.decomposition import PCA from sklearn.datasets import load_iris pca = PCA(n_com ...

  3. rabbit localhost不能登录

    解决方案 将C:\Users\{用户名}\.erlang.cookie 复制到 C:\Windows\System32\config\systemprofile 目录. 重启rabbitMQ服务 [转 ...

  4. MongoDb学习 自定义配置mongodb连接

    最近研究了mongodb获取本地连接属性的方案,场景就是mongodb的连接地址不在配置文件中配置,而是在代码中写好,代码中是从本地文件读取地址. public class MongoConfig { ...

  5. php内置函数分析之ucfirst()、lcfirst()

    ucfirst($str) 将 str 的首字符(如果首字符是字母)转换为大写字母,并返回这个字符串. 源码位于 ext/standard/string.c /* {{{ php_ucfirst Up ...

  6. RPC的解释以及RPC和Restful、RPC和RMI的区别

    如何科学的解释RPC 说起RPC,就不能不提到分布式,这个促使RPC诞生的领域. 假设你有一个计算器接口,Calculator,以及它的实现类CalculatorImpl,那么在系统还是单体应用时,你 ...

  7. MATLAB 和 armadillo 数据转换

    #include<iostream> #include<armadillo> int D=5; int M=4; int main() { arma::fmat x; x.ra ...

  8. 【leetcode】1035. Uncrossed Lines

    题目如下: We write the integers of A and B (in the order they are given) on two separate horizontal line ...

  9. EditText控件常用属性

    常用属性 android:id——控件ID android:layout_width——控件宽度 android:layout_height——控件高度 android:text——文本内容 andr ...

  10. 【Java】commons-lang3中DateUtils类方法介绍

    添加commons-lang3的Maven依赖 <dependency> <groupId>org.apache.commons</groupId> <art ...