git怎么实现过滤文件内容里的关键字,不允许提交?

比如PHP代码里的join,foreach里的sql?

阅读 3.8k
4 个回答

项目内部的.git/hooks里面有很多git-hook的sample shell脚本。

通过判断commit的内容里有无相关禁词,来做是否提交。

#!/bin/bash

if [ #有关键词 ]; then
    echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
    echo ""
    echo "禁止使用XXXX关键词代码!"
    echo ""
    echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
    exit 1
fi

当然,判断commit内容会比较复杂,需要先拿到commit内容,再判断。

换个思路通过忽略文件间接实现:单独弄个文件,把想忽略的内容放到里面,使用时代码中引入文件内容,gitignore 这个文件。

用别的方法实现了,虽然有点2.。。

//入口文件引入代码审查文件
if (is_file('./check_code.php')) {
    require_once('./check_code.php');
}

check_code.php

<?php
$keyword_arr = array('join', 'JOIN');
$allow = 255; //目录中目前存在的join
foreach ($keyword_arr as $value) {
    $cmd = 'grep -r --exclude-dir=Runtime '.$value.' * | wc -l';
    $r = execInBackground($cmd);
    if($r>$allow){
        exit('代码里包含的join查过额定数量'.$allow.',现为'.$r);
    }
}

function execInBackground($cmd) {
    $sum = 11;
    if (substr(php_uname(), 0, 7) == "Windows"){ 
        $r = pclose(popen("start /B ". $cmd, "r"));  
    } 
    else { 
        $r = exec($cmd . " > /dev/null &");   
    }
    return $r;
} 
?>
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题