产生背景:log4j漏洞修复
因笔者在职公司面向B2B开发,有不同产品版本,每个版本根据对应tag控制,故此次漏洞修复覆盖所有版本tag
1.检索所有tag输出到文件
git tag | grep release | awk -F \/ '{print $2}' > tag.txt
2.脚本遍历操作
#!/bin/bash
#Bug合并脚本
#参数: Bug修复提交commitId,例:52d89297260b97ca7968e6feb5a556f95099f98c
#使用命令,例:sh bugMergeScript.sh 52d89297260b97ca7968e6feb5a556f95099f98c
$work_home=/c/Users/xinlong.zhang/Documents/projects
if [ -f $work_home/tag.txt ]; then
cd $work_home/tom/
while read line
do
if [[ x$line != 'x' ]]; then
git checkout $line
echo "--------------------切换tag:$line-----------------------------"
git checkout -b fix-$line
echo "--------------------检出新分支:fix-$line-----------------------------"
git cherry-pick $1
echo "------------------- 迁移提交:$1------------"
git tag -d $line
git push origin :refs/tags/$line
echo "------------------- 删除旧tag:$1------------"
git tag -a $line -m 'log4j2漏洞修复'
git push origin $line
echo "--------------------推送新tag到远程仓库-------------------------------------"
git checkout -
git branch -D fix-$line
echo "------------------- 删除临时分支:fix-$line------------"
echo "-------------------------------------------------------------------------------------------------------------------------------------------------"
fi
done < $work_home/tag.txt
#移除分支文件以免后续覆盖
#rm -rf tag.txt
fi
注意:
在生成tag文件tag.txt,和编写完脚本之后需要将两个文件放到与git工程父级目录的同级目录