【xinsir】githook之precommit分享
2024-10-02 02:50:45
钩子类型
使用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更直观~
最新文章
- mrjob 使用 mongodb 作为数据源
- web安全之xss
- LeetCode:Find the Difference_389
- Centos系统下Lamp环境的快速搭建(超详细,转)
- Js作用域与作用域链详解
- jQuery 中的children()和 find() 的区别
- OpenGL的glClearColor和glClear改变背景颜色
- Linux kernel ‘xfs_attrlist_by_handle()’函数缓冲区溢出漏洞
- selenium webdriver 环境搭建--java
- php开发中的页面跳转方法总结
- 使用jsdoc-toolkit来自动生成js api文档
- Shell基础一
- Asp.net vNext 学习1
- spring boot / cloud (五) 自签SSL证书以及HTTPS
- Hadoop源码分类概要整理
- sql server2005安装时报 ‘服务无法启动’
- Stanford CS20学习笔记
- XPath简介及节点
- Java集合:LinkedList源码解析
- opencv 双边模糊,膨胀腐蚀 开 闭操作