如何获取Git仓库中近2个月未活跃分支及特定分支提交日期
Git仓库清理:筛选旧分支、查询分支提交日期及脚本实现
一、筛选近2个月未提交的分支
利用git for-each-ref输出可计算的Unix时间戳,结合日期对比就能精准筛选出超过2个月未提交的分支:
- 先计算2个月前的Unix时间戳:
# Linux系统 two_months_ago=$(date -d "2 months ago" +%s) # macOS系统替换为: # two_months_ago=$(date -v-2m +%s) - 执行筛选命令(支持bare仓库):
逻辑说明:git for-each-ref --sort=committerdate refs/heads/ \ --format='%(refname:short) %(committerdate:unix)' | awk -v cutoff="$two_months_ago" '$2 < cutoff {print $1}'%(refname:short)输出分支名,%(committerdate:unix)输出提交时间戳,通过awk对比时间戳,仅输出符合条件的分支名。
二、查询特定分支的最后提交日期
有两种简单方式:
- 用
git log快速查看(支持多种日期格式):# ISO标准日期格式 git log -1 --format="%ci" <分支名> # 相对时间格式(如"3 months ago") git log -1 --format="%cr" <分支名> - 用
git for-each-ref精准获取提交者日期:git for-each-ref refs/heads/<分支名> --format='%(committerdate)' # 如需Unix时间戳: # git for-each-ref refs/heads/<分支名> --format='%(committerdate:unix)'
三、完整仓库清理bash脚本
脚本包含克隆远程仓库、筛选旧分支、确认删除等步骤,避免误删:
#!/bin/bash REMOTE_URL="你的远程仓库地址" TMP_DIR="tmp/tmp-location" # 计算2个月前时间戳(Linux),macOS替换为date -v-2m +%s TWO_MONTHS_AGO=$(date -d "2 months ago" +%s) # 创建临时目录并克隆bare仓库 mkdir -p tmp git clone -q --depth 1 --bare --no-single-branch "$REMOTE_URL" "$TMP_DIR" || { echo "克隆仓库失败" exit 1 } cd "$TMP_DIR" || { echo "进入临时目录失败" exit 1 } # 获取符合条件的旧分支列表 OLD_BRANCHES=$(git for-each-ref --sort=committerdate refs/heads/ \ --format='%(refname:short) %(committerdate:unix)' | awk -v cutoff="$TWO_MONTHS_AGO" '$2 < cutoff {print $1}') if [ -z "$OLD_BRANCHES" ]; then echo "没有超过2个月未提交的分支" cd ../.. rm -rf "$TMP_DIR" exit 0 fi echo "找到以下超过2个月未提交的分支:" echo "$OLD_BRANCHES" # 确认删除操作 read -p "是否要删除这些分支?(y/N) " CONFIRM if [[ "$CONFIRM" != "y" && "$CONFIRM" != "Y" ]]; then echo "取消删除操作" cd ../.. rm -rf "$TMP_DIR" exit 0 fi # 逐一删除远程分支 for BRANCH in $OLD_BRANCHES; do echo "正在删除分支 $BRANCH..." git push origin --delete "$BRANCH" done # 清理临时文件 cd ../.. rm -rf "$TMP_DIR" echo "旧分支删除完成"
内容的提问来源于stack exchange,提问作者Pigeonman
相关产品推荐
相关产品推荐

