编写POSIX Shell脚本筛选指定版本分支之后的所有分支
简洁实现方案
直接利用分支命名的字典序等价于时间序的特性,用git+awk就能搞定,完全不需要数组循环,脚本如下:
#!/bin/sh # 检查是否传入了正确的分支参数 if [ $# -ne 1 ]; then echo "用法: $0 <release分支名>" exit 1 fi # 把输入的release分支转换成远程分支的格式 target_branch="origin/$1" # 筛选出所有时间晚于目标分支的远程release分支 git branch -r | grep 'origin/release/' | sed 's/^[[:space:]]*//' | awk "\$0 > \"$target_branch\""
细节说明
- 参数校验:防止用户不传参数或者传多参数,直接提示用法后退出
- 分支格式转换:输入的是
release/xxx,转成远程分支的origin/release/xxx,这样能直接用字符串对比 - 流水线处理:
git branch -r:列出所有远程仓库的分支grep 'origin/release/':只保留远程的release分支,过滤掉其他无关分支sed 's/^[[:space:]]*//':去掉git branch -r输出里分支名前面的空格(git默认会给分支名加前缀空格对齐)awk "\$0 > \"$target_branch\"":核心逻辑——因为分支名是yymmDD-HHMMSS格式,字典序和时间顺序完全一致,直接比较字符串大小就能选出所有比目标分支晚的远程release分支
示例验证
如果输入的分支是release/240216-121012,脚本会输出所有时间在它之后的远程release分支,比如:
origin/release/240321-170138 origin/release/240405-095914
内容的提问来源于stack exchange,提问作者Jason
相关产品推荐
相关产品推荐

