You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 12:15:03