如何用Bash获取前天19点至昨日19点的commit、MR并适配所有子模块
时间区间查询逻辑修正
你原脚本里的before.yesterday.7:00pm是git相对时间的不规范写法,不同区域、语言环境下解析极易出现偏差,推荐通过系统date命令生成标准ISO格式时间戳,100%匹配你的时间区间要求:
- 前天19点时间戳:
$(date -d "2 days ago 19:00" +%Y-%m-%dT%H:%M:%S) - 昨日19点时间戳:
$(date -d "1 day ago 19:00" +%Y-%m-%dT%H:%M:%S)
注:如果是macOS系统,需要将date -d替换为date -v,对应命令改为date -v-2d -v19H +%Y-%m-%dT%H:%M:%S和date -v-1d -v19H +%Y-%m-%dT%H:%M:%S
子模块遍历实现
完全可以通过git submodule foreach实现所有子模块的批量查询,该命令会自动进入每个子模块的工作目录执行指定指令,还可以通过内置变量$name输出当前子模块名称方便区分结果。
修正后完整脚本
#!/bin/bash # 计算时间区间 START_TIME=$(date -d "2 days ago 19:00" +%Y-%m-%dT%H:%M:%S) END_TIME=$(date -d "1 day ago 19:00" +%Y-%m-%dT%H:%M:%S) # 主仓库查询 echo "============================== 主仓库 Merges ==============================" git log --since="$START_TIME" --until="$END_TIME" --merges --format="%s" echo -e "\n============================== 主仓库 Commits ==============================" git log --since="$START_TIME" --until="$END_TIME" --no-merges --format="%s" # 所有子模块查询 echo -e "\n============================== 子模块查询结果 ==============================" git submodule foreach " echo -e '\n---------- 子模块:$name Merges ----------' git log --since='$START_TIME' --until='$END_TIME' --merges --format='%s' echo -e '\n---------- 子模块:$name Commits ----------' git log --since='$START_TIME' --until='$END_TIME' --no-merges --format='%s' "
内容的提问来源于stack exchange,提问作者Christophe
相关产品推荐
相关产品推荐

