如何用GitHub Workflow获取近7天推送到master分支的所有提交
GitHub Workflow 实现近7天master分支提交展示方案
一、计算7天前的日期(第2步)
在GitHub Actions的Ubuntu runner上,直接用GNU Date命令就能稳定实现,无需额外工具:
- 在Workflow步骤中执行shell命令,生成日期并保存为环境变量,方便后续调用:
TODAY=$(date +%Y-%m-%d) 7_DAYS_AGO=$(date -d "-7 days" +%Y-%m-%d) echo "TODAY=$TODAY" >> $GITHUB_ENV echo "7_DAYS_AGO=$7_DAYS_AGO" >> $GITHUB_ENV - 若需指定时区(比如北京时间),可先设置
TZ环境变量:export TZ="Asia/Shanghai" TODAY=$(date +%Y-%m-%d) 7_DAYS_AGO=$(date -d "-7 days" +%Y-%m-%d)
二、获取日期区间内的提交列表(第3步)
需要先拉取完整代码历史(默认checkout仅拉取最新提交),再用git log筛选区间内的master分支提交,最后将结果输出到Workflow摘要中:
完整Workflow示例
name: 展示近7天Master分支提交 on: workflow_dispatch: # 手动触发 schedule: - cron: '0 0 * * *' # 每天UTC零点自动触发 jobs: list-commits: runs-on: ubuntu-latest steps: - name: 拉取代码完整历史 uses: actions/checkout@v4 with: fetch-depth: 0 # 必须设置为0,确保拉取所有提交历史 - name: 计算日期区间 run: | export TZ="Asia/Shanghai" # 可选:设置时区 TODAY=$(date +%Y-%m-%d) 7_DAYS_AGO=$(date -d "-7 days" +%Y-%m-%d) echo "TODAY=$TODAY" >> $GITHUB_ENV echo "7_DAYS_AGO=$7_DAYS_AGO" >> $GITHUB_ENV - name: 提取并展示提交列表 run: | echo "### Master分支提交记录(${{ env.7_DAYS_AGO }} 至 ${{ env.TODAY }})" >> $GITHUB_STEP_SUMMARY # 用--oneline展示简洁提交信息,可根据需求调整git log参数(比如添加--author筛选作者) git log --since="${{ env.7_DAYS_AGO }}" --until="${{ env.TODAY }}" --oneline master >> $GITHUB_STEP_SUMMARY
三、更简便的实现方法
无需手动计算日期,直接用git log的相对时间参数--since="7 days ago",一步完成筛选:
简化后的Workflow步骤
- name: 拉取代码完整历史 uses: actions/checkout@v4 with: fetch-depth: 0 - name: 提取近7天提交列表 run: | echo "### Master分支近7天提交记录" >> $GITHUB_STEP_SUMMARY git log --since="7 days ago" --oneline master >> $GITHUB_STEP_SUMMARY
这种方式更简洁,且git会自动处理时间计算,无需额外步骤。
内容的提问来源于stack exchange,提问作者Luca D'Amico
相关产品推荐
相关产品推荐

