钩子类型

使用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更直观~

 

最新文章

  1. mrjob 使用 mongodb 作为数据源
  2. web安全之xss
  3. LeetCode:Find the Difference_389
  4. Centos系统下Lamp环境的快速搭建(超详细,转)
  5. Js作用域与作用域链详解
  6. jQuery 中的children()和 find() 的区别
  7. OpenGL的glClearColor和glClear改变背景颜色
  8. Linux kernel ‘xfs_attrlist_by_handle()’函数缓冲区溢出漏洞
  9. selenium webdriver 环境搭建--java
  10. php开发中的页面跳转方法总结
  11. 使用jsdoc-toolkit来自动生成js api文档
  12. Shell基础一
  13. Asp.net vNext 学习1
  14. spring boot / cloud (五) 自签SSL证书以及HTTPS
  15. Hadoop源码分类概要整理
  16. sql server2005安装时报 ‘服务无法启动’
  17. Stanford CS20学习笔记
  18. XPath简介及节点
  19. Java集合:LinkedList源码解析
  20. opencv 双边模糊,膨胀腐蚀 开 闭操作

热门文章

  1. EasyUi 表格自适应宽度
  2. window.onload和document.ready的区别
  3. linux--基础知识3
  4. Reference与ReferenceQueue
  5. css 表单头部固定
  6. 使用rabbitctl添加用户
  7. Git常用命令的操作
  8. 【leetcode】1031. Maximum Sum of Two Non-Overlapping Subarrays
  9. 华为RH2288V3服务器部署指南
  10. HashMap的几种遍历方式(转载)