SVN中的trunk、branch、tag都是什么?

发布于:2025-03-21 ⋅ 阅读:(33) ⋅ 点赞:(0)

在 SVN(Subversion)版本控制系统中,trunkbranch 和 tag 是三个核心目录,用于组织和管理代码的不同版本。它们通过 目录结构的约定 来实现版本控制策略。以下是详细说明和示例:


1. Trunk(主干)

  • 用途
    • trunk 是代码的主线开发目录,代表当前最新的稳定开发版本。
    • 所有新功能和日常开发都应基于 trunk 进行。
  • 存放内容
    • 最新开发中的代码(例如正在开发的 v2.0 版本)。
  • 操作示例

    bash

    
      
    # 检出主干代码到本地
    svn checkout http://svn.example.com/project/trunk

2. Branch(分支)

  • 用途
    • branch 是代码的并行开发目录,用于隔离高风险修改或长期任务,避免影响主线开发。
    • 常见的分支场景:开发新功能、修复复杂 Bug、适配不同客户需求。
  • 存放内容
    • 从主干分离出来的独立副本(例如 feature-login 分支)。
  • 操作示例

    bash

    
      
    # 从 trunk 创建新分支
    svn copy http://svn.example.com/project/trunk \
    http://svn.example.com/project/branches/feature-login \
    -m "Create branch for login feature"
    # 切换到分支开发
    svn checkout http://svn.example.com/project/branches/feature-login
  • 生命周期
    • 分支开发完成后,需合并回 trunk,随后可删除或保留存档。

3. Tag(标签)

  • 用途
    • tag 是代码的只读快照,用于标记特定状态(如发布版本、测试版本)。
    • 不可修改(若需修改,应创建新分支或新标签)。
  • 存放内容
    • 发布版本的静态副本(例如 v1.0.0release-2023-09)。
  • 操作示例

    bash

    
      
    # 从 trunk 创建标签(发布版本)
    svn copy http://svn.example.com/project/trunk \
    http://svn.example.com/project/tags/v1.0.0 \
    -m "Tag version 1.0.0"
  • 关键区别
    • tag 与 branch 技术上是相同的(都是副本),但 语义不同
      • tag 是存档点,branch 是开发线。

实际场景示例

假设一个团队正在开发一个电商系统:

阶段 1:日常开发
  • 所有开发者在 trunk 上协作开发新功能(如购物车模块)。
    http://svn.example.com/ecommerce/trunk
阶段 2:开发新功能
  • 需要开发一个高风险的“用户积分系统”,为避免影响主干:
    1. 从 trunk 创建分支 branches/feature-loyalty
    2. 开发者在此分支上独立开发。
    3. 开发完成后,将分支合并回 trunk
阶段 3:发布版本
  • 当 trunk 的代码达到稳定状态时,创建标签 tags/v1.0.0,用于发布。
    http://svn.example.com/ecommerce/tags/v1.0.0
阶段 4:修复生产 Bug
  • 发现 v1.0.0 存在支付漏洞:
    1. 从标签 tags/v1.0.0 创建分支 branches/hotfix-payment
    2. 修复 Bug 后,创建新标签 tags/v1.0.1
    3. 将修复内容合并回 trunk

总结

目录 用途 是否可修改 示例路径
trunk 主线开发 ✔️ http://svn.example.com/project/trunk
branch 并行开发(功能/Bug/实验) ✔️ http://svn.example.com/project/branches/feature-login
tag 版本存档(发布/里程碑) http://svn.example.com/project/tags/v1.0.0

通过这种结构,团队可以高效管理代码的并行开发、版本发布和历史回溯。