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
相关产品推荐
相关产品推荐

