SVN(Subversion)的生命周期主要指一个项目从创建仓库到最终归档(或废弃)的完整过程。下面系统性地讲解 SVN 项目/仓库的典型生命周期阶段,以及每个阶段的主要操作和最佳实践。
1. 规划与需求阶段(Planning)
- 确定仓库布局策略(重要!后期很难改):
- 单仓库多项目(推荐中小团队)
└ /repo
├ trunk
├ branches
└ tags - 多仓库单项目(适合大公司、权限严格隔离)
/repo-projectA、/repo-projectB … - 确定访问协议:svn://、http://、https://
- 确定认证方式:文件认证、LDAP、SSO 等
- 确定备份与灾备策略
2. 创建阶段(Initialization)
# 创建仓库(单仓库多项目最常见)
svnadmin create /svn/repos/myproject
# 建立标准目录结构(一次性导入)
svn mkdir -m "init structure" \
file:///svn/repos/myproject/trunk \
file:///svn/repos/myproject/branches \
file:///svn/repos/myproject/tags
# 或者本地导入
svn import . file:///svn/repos/myproject/trunk -m "initial import"
3. 日常开发阶段(Active Development)—— 最长阶段
| 操作 | 命令示例 | 说明 |
|---|---|---|
| 检出(Checkout) | svn checkout URL ./work | 第一次获取代码 |
| 更新(Update) | svn update | 获取他人最新修改 |
| 提交(Commit) | svn commit -m “fix bug” | 提交本地修改 |
| 添加文件 | svn add newfile.cpp | |
| 删除文件 | svn delete oldfile.cpp | |
| 查看状态 | svn status / svn diff | |
| 查看日志 | svn log |
4. 分支与合并阶段(Branching & Merging)
| 类型 | 目的 | 典型生命周期 |
|---|---|---|
| feature 分支 | 新功能开发 | 创建 → 开发 → 合并到 trunk → 删除 |
| release 分支 | 发布版本维护 | 从 trunk 创建 → 修复 bug → 打 tag → 长期维护 |
| hotfix 分支 | 紧急修复线上问题 | 从 tag 创建 → 修复 → 合并到 trunk 和 release → 打新 tag |
| tag | 版本快照(只读) | 永远不修改,只用于归档 |
示例:
# 创建 release 分支
svn copy ^/trunk ^/branches/release-1.0 -m "create release branch"
# 打版本标签(发布)
svn copy ^/branches/release-1.0 ^/tags/RELEASE_1.0.0 -m "tag 1.0.0"
# 紧急热修复
svn copy ^/tags/RELEASE_1.0.0 ^/branches/hotfix-1.0.1 -m "hotfix"
5. 发布与归档阶段(Release & Tagging)
- 每次正式发布必须打 tag(不可修改)
- tag 命名规范推荐:
- RELEASE_1.0.0
- v2025.03.15
- build-20250315
6. 维护与支持阶段(Maintenance)
- 对 release 分支或 hotfix 分支进行 bugfix
- 定期合并到 trunk(可选,防止偏差太大)
- 长期支持的老版本可能保留多年
7. 归档与废弃阶段(Archiving / Retirement)
当项目彻底结束时的几种处理方式(按推荐顺序):
| 方式 | 操作方法 | 优点 | 缺点 |
|---|---|---|---|
| 保留仓库 + 只读权限 | 把所有用户权限改为只读 | 历史完整,随时可查 | 占用磁盘空间 |
| svn dump + 冷存储 | svnadmin dump /repo > repo-2025.dump | 节省在线空间,可随时恢复 | 恢复较慢 |
| 转为 Git(推荐) | 使用 svn2git 或 git-svn 迁移到 GitLab/GitHub | 现代工具链、节省资源 | 迁移有一定工作量 |
| 彻底删除(不推荐) | rm -rf 或 svnadmin delete | 节省空间 | 历史永久丢失,不可恢复 |
归档常用命令:
# 导出完整历史(推荐保存方式)
svnadmin dump /svn/repos/myproject > myproject-full.dump
# 只导出最近 2 年的提交(节省空间)
svnadmin dump /svn/repos/myproject --incremental -r {2023-01-01}:HEAD > myproject-recent.dump
# 后期恢复
svnadmin load /new/repos < myproject-full.dump
SVN 项目典型生命周期总结(时间轴)
规划 → 创建仓库 → 导入初始代码 → 日常开发(trunk)
↓
功能分支开发 → 合并 → 准备发布
↓
创建 release 分支 → 测试 → 打 tag 发布
↓
维护阶段(bugfix → 打新 tag)
↓
项目结束 → 归档(dump + 只读 / 迁移 Git) → 冷存储
如果你现在处于生命周期的某个具体阶段(比如要打第一个正式版本、要归档老项目、或准备从 SVN 迁移到 Git),告诉我具体情况,我可以给你最针对性的操作方案和脚本。