SVN 生命周期

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),告诉我具体情况,我可以给你最针对性的操作方案和脚本。

文章已创建 2637

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部