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

Azure DevOps:保留master分支1年期发布历史需求

解决Master分支发布历史1年留存问题

一、先定位历史被自动删除的根源

  • 排查仓库是否存在定时清理脚本:比如项目根目录的cleanup-history.sh,或是CI/CD流水线(GitHub Actions、GitLab CI等)里的自动清理任务,这类脚本通常会删除旧标签、提交记录或发布工件。
  • 检查Git垃圾回收配置:查看gc.pruneExpire参数,它控制Git自动清理未引用对象的时间,若被设为2-3个月就会定期删除旧历史:
    # 查看全局配置
    git config --global gc.pruneExpire
    # 查看当前仓库本地配置
    git config gc.pruneExpire
    

二、配置Git保留1年历史

1. 保护发布标签

如果你的发布是通过Git标签(如v2.4.1、release-202403)标记的,先给这些标签加保护,防止被误删或自动清理:

  • 在代码托管平台(GitHub/GitLab/Gitee)的仓库设置中,找到「标签保护」规则,添加refs/tags/*规则,禁止删除任何标签。
  • 本地可标记标签为永久归档(辅助操作):
    git tag -f -a v2.4.1 -m "Permanent release tag: do not delete"
    

2. 调整Git垃圾回收策略

修改gc.pruneExpire为1年,让Git不会清理1年内的历史对象:

# 全局生效(所有仓库)
git config --global gc.pruneExpire "1.year.ago"
# 仅当前仓库生效
git config gc.pruneExpire "1.year.ago"

同时可以关闭自动GC触发,避免误操作:

git config gc.auto 0

之后需要手动清理垃圾时,再执行git gc --prune=1.year.ago。

三、建立独立归档仓库做双重保障

如果担心平台端的自动清理或误操作,创建一个只读的归档仓库,定期同步所有历史:

# 克隆当前仓库的镜像(包含所有分支、标签)
git clone --mirror https://your-main-repo-url.git
cd your-main-repo-url.git
# 添加归档仓库作为远程
git remote add archive https://your-archive-repo-url.git
# 推送所有历史到归档仓库
git push archive --all && git push archive --tags

把这个步骤加到CI/CD流水线,每月自动执行一次,确保归档仓库的历史和主仓库完全同步。

四、修正CI/CD流水线的清理逻辑

很多时候历史丢失是因为流水线里的清理步骤:

  • 检查GitHub Actions中是否有删除旧Release的任务,比如使用actions/delete-package-versions的话,把min-age-days参数改成365。
  • 检查GitLab CI里的脚本,是否有git reset --hard、删除旧标签或发布工件的步骤,修改时间阈值为1年。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 00:20:43