SVN 总结(十四)
14.总结
一、SVN 核心概念
| 概念 | 说明 |
|---|---|
| Repository(版本库) | 中央存放所有代码及历史的地方 |
| Checkout(检出) | 从版本库首次获取工作副本 |
| Commit(提交) | 将本地修改上传到版本库(原子操作) |
| Update(更新) | 将工作副本与版本库最新状态同步 |
| Working Copy(工作副本) | 本地可编辑的私有空间 |
| Revision(版本号) | 全局递增的数字,标识每次提交 |
| Branch(分支) | 从主线分离出的独立开发线 |
| Tag(标签) | 特定版本的快照,通常用于里程碑 |
二、SVN 生命周期
创建版本库 → 检出 → 更新 → 修改 → 复查 → 提交
↑___________________|
(循环迭代)三、常用命令汇总
3.1 基本操作
| 操作 | 命令示例 | 说明 |
|---|---|---|
| 创建版本库 | svnadmin create /path/to/repo |
服务器端执行 |
| 启动服务 | svnserve -d -r /svn_root --listen-port 3690 |
-d 守护进程,-r 指定根目录 |
| 检出 | svn checkout svn://host/repo --username=user |
缩写 svn co |
| 更新 | svn update |
缩写 svn up |
| 添加 | svn add filename |
将文件加入版本控制(待提交) |
| 提交 | svn commit -m "log message" |
缩写 svn ci |
| 查看状态 | svn status |
显示工作副本变更状态 |
| 查看差异 | svn diff |
比较本地与副本差异 |
| 撤销未提交修改 | svn revert filename |
不可逆,丢失本地修改 |
| 查看日志 | svn log -r 1:10 -v |
-v 显示修改路径 |
| 查看文件内容(特定版本) | svn cat -r 3 file.txt |
不比较,直接输出 |
| 列出目录 | svn list svn://host/repo |
不检出仅查看 |
3.2 分支与标签
| 操作 | 命令 |
|---|---|
| 创建分支 | svn copy trunk/ branches/my_branch |
| 创建标签 | svn copy trunk/ tags/v1.0 |
| 合并分支到主干 | cd trunk && svn merge ../branches/my_branch |
| 提交分支/标签 | svn commit -m "create branch/tag" |
注意:分支和标签本质都是
svn copy,区别在于用途:分支后续会继续修改并可能合并回主干;标签通常固定不变。
3.3 版本回退(撤销已提交版本)
# 反向合并(生成一个新版本来回退)
svn merge -r 当前版本:目标版本 file
svn commit -m "revert to revision X"示例:当前版本 22,想撤销到版本 21
svn merge -r 22:21 readme → svn commit
3.4 解决冲突
更新触发冲突:
svn update 后出现C状态选择处理方式:
-
p推迟 -
mc使用本地版本 -
tc使用服务器版本 -
e手动编辑
-
提交解决后的文件:
svn commit
四、配置文件详解
4.1 svnserve.conf(服务配置)
[general]
anon-access = none # 匿名用户权限: none/read/write
auth-access = write # 认证用户权限
password-db = passwd # 用户口令文件(相对路径)
authz-db = authz # 权限控制文件
realm = my_realm # 认证域4.2 passwd(用户文件)
[users]
admin = admin123
zhang = 1234564.3 authz(路径权限)
[groups]
dev_team = zhang,li
admin_team = admin
[/] # 所有库根目录
@admin_team = rw
* = r
[repo1:/trunk] # 特定库的路径
@dev_team = rw五、SVN 启动模式(svnserve)
| 模式 | -r 参数指向 |
特点 | URL 示例 |
|---|---|---|---|
| 单库 | 直接指向版本库目录 | 一个服务对应一个库 | svn://host/ |
| 多库 | 指向版本库的父目录 | 一个服务对应多个库 | svn://host/repo_name |
权限段区别:
- 单库:
[/]表示该库根目录 - 多库:
[repo_name:/]表示指定库根目录
六、TortoiseSVN 使用要点
- 图标含义:绿色勾(一致)、红色感叹号(冲突)、蓝色加号(新增待提交)、灰色减号(删除待提交)
- 常用操作:右键菜单 →
SVN Checkout、SVN Update、SVN Commit、TortoiseSVN → Branch/Tag、Merge - 语言设置:安装后需重启;在
Settings →Language切换中文 - 分支/标签:通过
Branch/Tag 对话框完成svn copy,提交后需在目标目录执行Update才能看到
七、重要注意事项
- 原子提交:Commit 要么全部成功,要么全部失败,不会出现半成品。
- 提交前先 Update:避免基于过期版本修改导致冲突。
- 写清日志:每次提交应写明改动原因,便于追溯。
- 不要手动修改
.svn 目录:会破坏版本控制元数据。 - 冲突处理:遇到冲突不要强行提交,按流程解决后再提交。
- Revert 不可逆:
svn revert会丢弃所有未提交的本地改动,无法找回。 - 标签只读:标签创建后不应再提交修改,如需修复应基于标签新建分支。
- 分支合并后需提交:
svn merge 只影响工作副本,需执行svn commit使合并结果进入版本库。 - 路径大小写敏感:SVN 在类 Unix 系统下路径区分大小写,在 Windows 下通常不区分但建议保持一致。
- 备份版本库:定期使用
svnadmin dump备份,防止数据丢失。
八、典型场景
| 场景 | 操作摘要 |
|---|---|
| 加入新项目 | svn checkout → 编写代码 → svn add → svn commit |
| 同步队友代码 | svn update |
| 放弃本地修改 | svn revert <file> |
| 恢复已提交的版本 | svn merge -r 当前:目标 → svn commit |
| 创建开发分支 | svn copy trunk/ branches/feature → svn commit |
| 合并分支回主干 | cd trunk → svn merge ../branches/feature → svn commit |
| 发布版本打标签 | svn copy trunk/ tags/v2.0 → svn commit |
| 查看某人提交历史 | svn log --search username 或 svn log | grep username |