zoukankan      html  css  js  c++  java
  • 【xinsir】githook之precommit分享

    个人博客:https://theeye.tech

    博客小程序:

    钩子类型

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

     
  • 相关阅读:
    【mysql】mac上基于tar.gz包安装mysql服务
    【maven】在idea上创建maven多模块项目
    关于Class.getResource和ClassLoader.getResource的路径问题
    【maven】Maven打包后为何文件大小改变了
    git常用命令
    第一章 第一个spring boot程序
    第二章 eclipse中m2e插件问题
    第一章 mac下开发环境的配置
    第一章 开发中遇到的错误列表
    第十一章 企业项目开发--消息队列activemq
  • 原文地址:https://www.cnblogs.com/xinsir/p/12012764.html
Copyright © 2011-2022 走看看