给我一个shell脚本,该脚本有一个主要参数,参数是一个目录地址,对参数数目进行校验,对参数目录是否存在进行校验,脚本会递归检查该目录下的所有的git项目,通过git describe --tags获取tag信息,并只读取版本,并检查当前目录代码有没有更新,如果有更新就对tag版本最后一位加一,如果没有更新就不做任何操作,如果目录没有tag信息,就添加一个0.0.0的版本信息,并提交到仓库,commit信息为更新版本到***,***是更新后的tag版本,更新信息用英文填写。
时间: 2023-02-21 17:40:50 浏览: 60
以下是一个简单的shell脚本,可以满足你的需求:
```
#!/bin/bash
# 校验参数数目
if [ $# -ne 1 ]; then
echo "请提供一个目录地址作为参数。"
exit 1
fi
# 校验目录是否存在
dir=$1
if [ ! -d $dir ]; then
echo "提供的目录不存在。"
exit 1
fi
# 遍历所有的git项目
for project in $(find $dir -type d -name .git); do
cd $(dirname $project)
# 获取当前目录的版本信息
version=$(git describe --tags 2>/dev/null | awk -F- '{print $1}')
# 如果存在版本信息
if [ $? -eq 0 ]; then
# 检查是否有代码更新
git_status=$(git status -s)
if [ -n "$git_status" ]; then
# 如果有代码更新,更新版本号
last_digit=$(echo $version | awk -F. '{print $NF}')
version=$(echo $version | sed "s/\.[0-9]*$/.$(($last_digit + 1))/")
git tag $version
git push --tags
git commit -m "更新版本到$version"
fi
else
# 如果没有版本信息,添加0.0.0版本
git tag 0.0.0
git push --tags
git commit -m "更新版本到0.0.0"
fi
cd - >/dev/null
done
```
该脚本首先校验了参数数目和目录是否存在,然后遍历目录下的所有的git项目,对每个项目获取tag版本并判断是否有代码更新,如果有更新就更新版本,否则不做任何操作。如果该项目没有tag版本