为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
白衣染霜花 2019-03-04 02:48:11
比如PHP代码里的join,foreach里的sql?
查看完整描述

4 回答

?
湖上湖

TA贡献2003条经验 获得超2个赞

githook

查看完整回答
反对 回复 2019-03-18
?
回首忆惘然

TA贡献1847条经验 获得超11个赞

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

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

#!/bin/bash

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

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

查看完整回答
反对 回复 2019-03-18
?
富国沪深

TA贡献1790条经验 获得超9个赞

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

查看完整回答
反对 回复 2019-03-18
?
慕标琳琳

TA贡献1830条经验 获得超9个赞

用别的方法实现了,虽然有点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;
} 
?>
查看完整回答
反对 回复 2019-03-18
  • 4 回答
  • 0 关注
  • 415 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信