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索引数据结构详解(1)
    深入理解mysql锁与事务隔离级别
    关于redis HSCAN count参数不生效的问题
    在idea的java开发中字符串length()方法获取长度与赋值不符的问题
    在网页中使用超链接来打开本地应用(可传参数)
    断言(assert)简介
    9. Palindrome Number
    四、MapReduce
    三、HDFS——Hadoop分布式文件系统
  • 原文地址:https://www.cnblogs.com/xinsir/p/12012764.html
Copyright © 2011-2022 走看看