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

如何判断Git镜像推送是否有内容?避免无变更时解归档仓库

解决方案

要判断git push --mirror是否会产生实际推送内容,最直接可靠的方式是用Git的--dry-run参数模拟推送操作,根据模拟结果决定是否执行仓库解归档。以下是修改后的脚本及说明:

修改后的同步脚本

git remote set-url origin ssh://oldorigin
git fetch --all --tags
git remote update
git remote set-url origin ssh://neworigin

# 模拟镜像推送,捕获全部输出结果
push_result=$(git push --dry-run --mirror 2>&1)

# 判断是否有内容需要推送
if [[ ! "$push_result" =~ "Everything up-to-date" ]]; then
  gh repo unarchive
  git push --mirror
  gh repo archive
fi

关键逻辑说明

  • git push --dry-run --mirror:该命令会完整模拟镜像推送的流程,但不会对远程仓库做任何实际修改。如果没有内容需要推送,输出会包含Everything up-to-date;如果有提交、分支或标签需要同步,会输出具体的推送动作。
  • 2>&1:把Git命令的标准错误输出重定向到标准输出,确保能捕获到所有推送相关的提示信息,避免遗漏判断依据。
  • 条件判断:只有当模拟推送结果中不包含Everything up-to-date时,才执行解归档、推送、重新归档的流程,彻底避免无意义的仓库状态变更。

补充说明

因为目标源是全新仓库,第一次执行脚本时,--dry-run必然会显示需要推送所有内容,因此会自动触发解归档和推送操作,符合预期需求。后续同步时,只有旧源出现新提交、分支或标签变更时,才会切换仓库的归档状态。

内容的提问来源于stack exchange,提问作者KamilCuk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 09:52:54