使用shell脚本 批量修改git分支代码

        gitlab上需要对每个分支都要做相同的删除和修改,一共有80多个分支,手动修改太麻烦,就写一个脚本

        使用sed 命令统一删除,sed的使用链接https://www.runoob.com/linux/linux-comm-sed.html

        脚本从远程仓库拉代码,change当前目录,fetch远程分支,拉取远程分支并切换,使用find命令在src文件中查找所有的regular文件(find ./src -type f),使用sed做匹配行删除,由于sed的正则匹配删除多行尝试了很多次没有成功,又使用nodejs写了一个脚本做复杂的正则匹配删除。

test.sh 

# !/bin/bash

git clone git@gitlab.****my_directory.git
cd my_directory
pwd
git fetch
for branch in `git branch -r `
do
    if [ $branch == "origin/HEAD" ]
        then
            echo "无效分支"
    elif [ $branch == "->" ]
        then
            echo "字符"
    else
        localbranch="${branch:7}"
        echo $branch
        git checkout  -b $localbranch $branch 
        echo "============================分支:$localbranch=============================" >> ../log 
        for file in `find ./src -type f`
        do
            ../modfile.js $file
            sed -i '/肤色/d' $file
            sed -i '/民族/d' $file
            sed -i '/labelNation/d' $file
            sed -i '/skinColor/d' $file
            
        done

        git diff  ./src >> ../log
        git add .
        git commit -m"删除敏感字段"
        git push origin $localbranch

    fi
done

以下是node.js 做正则匹配的删除部分,创建文件modfile.js,使用chmod +x modfile.js给文件增加执行权限,文件顶部加上#!/usr/bin/env node,表示是一个可以使用nodejs执行的可运行脚本,正则的使用因业务而异,这里就不多介绍。这里需要提醒下在使用fs.writeFileSync的时候注意判断适合的文件再去写入,否则会把图片文件等二进制文件写成utf8的格式

modfile.js 

#!/usr/bin/env node

const { exit } = require("process")
const process = require("process")
const fs = require('fs');
if(process.argv.length<3){
    process.exit(1)
}
var filename=process.argv[2]
var pattern1=/skinColorChange\(val\)[^\}]*\}[^\}]*\}/g
var pattern2=/([^d]|d[^i]|di[^v])*labelNation([^d]|d[^i]|di[^v])*<\/div>/g
var pattern3=//g

var pattern1_1=/skinColorChange\(val\)[^\}]*\}[^\}]*\}/
var pattern2_1=/([^d]|d[^i]|di[^v])*labelNation([^d]|d[^i]|di[^v])*<\/div>/
var pattern3_1=//

if(fs.existsSync(filename)){
    if(fs.statSync(filename).isFile()){
        var data=fs.readFileSync(filename,'utf8');
        if(pattern1_1.test(data)||pattern2_1.test(data)||pattern3_1.test(data)){
            data=data.replace(pattern1,"")
            data=data.replace(pattern2,"")
            data=data.replace(pattern3,"")
            fs.writeFileSync(filename,data)
        }else{
            
        }
        
    };
}

        最后创建一个log 文件,脚本执行的过程中使用git diff 把log重定向到log文件

 

文件目录结构        

使用shell脚本 批量修改git分支代码_第1张图片

你可能感兴趣的:(javascript,git,shell)