SVN 标签(Tag)最全、最实战指南
(2025 年最新,团队都在这么干,直接抄就行)
1. 标签的本质(一句话记住)
标签 = 对某个时刻代码的“只读快照”,本质就是一次 svn copy 到 tags 目录,永远不再修改。
2. 标准 tags 目录结构(99.9% 公司都这么用)
/tags
├ v1.0.0
├ v1.0.1
├ v1.1.0
├ v2.0.0
├ 2025.11.22
├ 2025.11.22-hotfix1
├ build-20251122-001
└ release-internal-20251120 ← 内部测试包也常打 tag
3. 什么时候必须打 tag?(强制执行)
| 场景 | 必须打 tag 的理由 | 推荐命名方式 |
|---|---|---|
| 正式发布给客户 | 随时可以准确回滚、复现 | v1.0.0、v2.1.3 |
| 给测试/上线包 | 测试环境、运维、回滚都靠它 | 2025.11.22、20251122 |
| 热修复上线 | 记录修复了哪个 bug,防止重复 | v1.0.1、2025.11.22-hotfix1 |
| 内部里程碑 | 领导要看“目前进度” | milestone-sprint23 |
| 第三方交付 | 对方要永久存档 | deliver-clientA-20251122 |
4. 打标签的 5 种最常用命令(直接复制)
# 1. 最标准、最常用(从 release 分支打正式版)
svn copy ^/branches/release-1.0 ^/tags/v1.0.0 \
-m "发布正式版本 v1.0.0(功能完整,已通过全量测试)"
# 2. 每天自动打日期标签(上线包最常用)
svn copy ^/trunk ^/tags/$(date +%Y.%m.%d) \
-m "每日构建包 $(date +%F)"
# 3. 热修复标签(紧急上线)
svn copy ^/branches/hotfix-payment ^/tags/v1.0.1-hotfix \
-m "紧急修复支付超时问题(影响订单12345)"
# 4. 带构建号(Jenkins、GitLab CI 最常用)
svn copy ^/trunk ^/tags/build-20251122-037 \
-m "CI 构建 #37,通过自动化测试"
# 5. 一键打标签 + 立即 checkout(超实用)
svn copy ^/trunk ^/tags/v1.0.0 -m "发布 v1.0.0" && \
svn checkout ^/tags/v1.0.0 release-v1.0.0
5. 推荐的标签命名规范(选一种全团队统一)
| 类型 | 推荐格式 | 示例 | 适用场景 |
|---|---|---|---|
| 正式发布 | v主版本.次版本.修订号 | v1.0.0、v2.1.3 | 对外发布 |
| 日期标签 | YYYY.MM.DD 或 YYYYMMDD | 2025.11.22、20251122 | 每日/每周构建 |
| 带时间戳 | YYYYMMDD-HHmm | 20251122-1430 | 频繁发包 |
| 热修复 | v原版本-hotfix序号 | v1.0.1-hotfix1 | 紧急补丁 |
| 内部/测试 | test-YYYYMMDD / internal- | test-20251122 | 内测包 |
6. 企业最爽的“一键打标签脚本”(直接保存为 svntag)
#!/bin/bash
# 用法:svntag v1.0.0 "发布正式版"
# 或 svntag auto ← 自动按日期+时间
# 或 svntag hotfix ← 热修复专用命名
if [ "$1" = "auto" ]; then
TAG=$(date +%Y%m%d-%H%M)
MSG="自动构建包 $(date '+%Y-%m-%d %H:%M')"
elif [ "$1" = "hotfix" ]; then
TAG="hotfix-$(date +%Y%m%d-%H%M)"
MSG="紧急热修复 $(date '+%Y-%m-%d %H:%M')"
else
TAG="$1"
MSG="$2"
[ -z "$MSG" ] && MSG="发布标签 $TAG"
fi
svn copy ^/trunk ^/tags/$TAG -m "$MSG"
echo "标签打好了:^/tags/$TAG"
svn info ^/tags/$TAG
7. TortoiseSVN 图形化打标签(Windows 30秒完成)
- 右键项目文件夹 → TortoiseSVN → Branch/tag…
- To URL 改成:
^/tags/v1.0.0 - Log message 写发布说明
- 点 OK → 1 秒完成!
8. 常见错误(千万别犯)
| 错误行为 | 后果 | 正确做法 |
|---|---|---|
| 直接在 trunk 上改代码后打 tag | 历史混乱,后人看不懂 | 一定从 release 分支或干净 trunk 打 |
| 把 tag 当分支用,继续提交 | 破坏了“快照”原则 | tag 打完永远不再动 |
| 标签命名随意(aaa、111) | 半年后没人知道是干嘛的 | 强制统一规范 |
| 没写提交信息 | 别人不知道这个版本意义 | 强制写清楚发布内容 |
现在你打出来的标签,已经比 99% 的团队都专业、都整洁了!
告诉我你现在要打什么标签?
我 10 秒给你最完美的一条命令:
- 要发正式版 v1.0.0?
- 要打今天的线上包?
- 刚修完紧急 bug 要热修复标签?
- 要给测试打内部测试包?
直接说,我立刻给你最现成的一句!