SVN 分支(Branch)最全实战指南
(2025 年最新、最规范、团队必备)
1. SVN 分支的本质(一句话记住)
SVN 的分支 = 仓库里的一次“廉价复制”(cheap copy),本质就是复制一份目录,几乎不占额外空间。
2. 标准目录结构(99% 的团队都这么用,强烈建议照抄)
/myproject ← 仓库根目录
├ trunk ← 主干,日常开发都在这里
├ branches ← 所有分支放这里
│ ├ release-1.0 ← 发布分支(长期维护)
│ ├ feature-user-center ← 功能分支(短期)
│ ├ hotfix-order-bug ← 紧急热修复分支
│ └ uat ← 测试环境专用分支
└ tags ← 发布版本快照(只读)
├ v1.0.0
├ v1.0.1
└ 2025.11.22
3. 4 种最常见分支类型 + 完整生命周期
| 分支类型 | 创建时机 | 生命周期 | 命名规范推荐 |
|---|---|---|---|
| feature 分支 | 开始开发新功能 | trunk → 创建 → 开发 → 合并回 trunk → 删除 | feature/login-oauth |
| release 分支 | 准备发布正式版 | trunk → 创建 → 只修 bug → 打 tag → 长期维护 | release-1.0、release-2025.11 |
| hotfix 分支 | 线上紧急 bug | 从最新 tag → 创建 → 修复 → 合并到 trunk 和 release → 打新 tag → 删除 | hotfix/order-payment-20251122 |
| personal 分支 | 个人不想影响主干 | trunk → 创建 → 随便玩 → 合并或直接废弃 | users/zhangsan/experiment |
4. 分支操作全命令(直接复制粘贴)
# 1. 创建分支(最常用的 3 种)
# 创建功能分支
svn copy ^/trunk ^/branches/feature-new-ui -m "开始开发新版UI"
# 创建发布分支
svn copy ^/trunk ^/branches/release-1.0 -m "准备发布1.0版本"
# 创建紧急热修复分支(从 tag 创建)
svn copy ^/tags/v1.0.0 ^/branches/hotfix-payment -m "紧急修复支付bug"
# 2. 切换到分支开发(两种方式)
# 方式A:直接 checkout 分支(推荐)
svn checkout ^/branches/feature-new-ui feature-new-ui
# 方式B:已 checkout trunk,用 switch 切换(更省空间)
svn switch ^/branches/feature-new-ui
# 3. 合并分支(核心!)
# 把 feature 分支合并回 trunk(最常用)
svn merge ^/branches/feature-new-ui
svn commit -m "merge: 合并新版UI功能"
# 把 hotfix 同时合并到 trunk 和 release 分支(热修复标准做法)
cd trunk_working_copy
svn merge ^/branches/hotfix-payment
svn commit -m "merge hotfix to trunk"
cd ../release-1.0_working_copy
svn merge ^/branches/hotfix-payment
svn commit -m "merge hotfix to release-1.0"
# 4. 打 tag(发布版本)
svn copy ^/branches/release-1.0 ^/tags/v1.0.0 -m "发布正式版 v1.0.0"
# 5. 删除已合并完成的分支(保持仓库整洁)
svn delete ^/branches/feature-new-ui -m "删除已合并的功能分支"
5. 一键脚本:创建 + 切换 + 开发模板
# 创建并立即切换到新分支(最爽的写法)
create-branch() {
if [ -z "$1" ]; then
echo "用法: create-branch feature-login"
return
fi
svn copy ^/trunk ^/branches/$1 -m "创建分支 $1"
svn switch ^/branches/$1
echo "已创建并切换到分支: $1"
}
# 使用:create-branch feature-new-api
6. 最佳实践(团队强制执行)
| 规则 | 理由 |
|---|---|
| 永远从 trunk 或 tag 创建分支 | 保证基线干净 |
| 功能开发必须开分支 | 不影响主干稳定性 |
| 合并后立即删除分支 | 保持 branches 目录整洁 |
| 发布必须打 tag | 历史可追溯,随时可回滚 |
| 热修复要同时合并到 trunk 和 release | 防止下次发布又出同样 bug |
- 合并前先
svn update| 避免冲突 |
| 大合并前先在分支里做集成测试 | 降低风险 |
7. TortoiseSVN 图形化操作(Windows 最快)
- 右键 → TortoiseSVN → Branch/tag…
- To URL: 填 ^/branches/feature-xxx
- Log message: 写创建理由
- 勾选 “Switch working copy to new branch/tag”
→ 一点就完成创建+切换!
现在你已经完全掌握 SVN 分支了,比 95% 的老程序员还专业!
告诉我你现在想干啥,我直接给你最现成的一条命令:
- 要开新功能分支?
- 要准备发布 1.0?
- 线上出 bug 要打热修复?
- 要合并分支回 trunk?
贴一句需求,我 10 秒给你最完美的命令。