目录
一、前置:两种使用方式
二、第一步:首次拉取代码(检出 Checkout)
1. 图形端(TortoiseSVN)
2. 对应命令行
三、日常开发核心 4 步(90% 工作只用到这几步)
1. 拉取最新代码(Update 更新)
图形端
命令行
2. 编写 / 修改代码
3. 查看本地修改(Status 状态)
图形端
命令行
4. 提交代码(Commit 提交)
图形端
命令行
四、新增 / 删除 / 重命名 文件(标准操作)
1. 新增文件
2. 删除文件
3. 重命名 / 移动文件
五、重中之重:解决代码冲突(Conflict)
1. 冲突表现
2. 冲突文件说明
3. 三种解决方式(按场景选)
方式 1:手动合并(最常用、推荐)
方式 2:使用我的版本(丢弃服务器代码)
方式 3:使用服务器版本(丢弃本地改动)
六、回滚代码(撤销错误提交 / 本地改动)
场景 1:本地改坏了,未提交,恢复原样
图形端
命令行
场景 2:代码已经提交到服务器,需要回滚版本
七、分支使用(团队迭代 / 上线必备)
1. 创建分支(从主干拉分支开发)
2. 分支合并(功能开发完,合并回主干)
3. 创建 Tag(上线归档)
八、工作必备规范(团队协作红线)
九、常见问题 & 踩坑总结
十、常用命令行速查表(收藏)
SVN(Subversion)是集中式版本控制工具,代码统一存放在中央服务器,团队所有人拉取、提交、更新代码,企业传统项目、内网项目使用极多。下面分环境、核心流程、常用命令 / 客户端、冲突解决、分支、规范、踩坑全流程讲解,适配日常团队协作。
一、前置:两种使用方式
工作中主要分两类,任选其一即可:
- Windows:TortoiseSVN(最主流,右键菜单操作)
- Mac:Cornerstone、SmartSVN、Xcode 内置 SVN
二、第一步:首次拉取代码(检出 Checkout)
首次拿到项目,需要把中央仓库代码下载到本地。
1. 图形端(TortoiseSVN)
- URL of repository:公司 SVN 仓库地址(管理员提供)
- Checkout directory:本地存放路径
检出后文件夹会带 绿色对勾 图标,代表 SVN 托管成功。
2. 对应命令行
# 格式:svn checkout 仓库地址 本地路径
svn checkout https://svn.xxx.com/project /workspace/project
# 简写
svn co 仓库地址
三、日常开发核心 4 步(90% 工作只用到这几步)
开发循环:更新代码 → 改代码 → 查看修改 → 提交代码
1. 拉取最新代码(Update 更新)
多人协作,改代码前必须先更新,避免本地代码和服务器脱节。
原则:先更新,后开发
图形端
右键项目文件夹 → SVN Update 自动拉取服务器最新代码,提示更新文件数量。
命令行
svn update
# 简写 svn up
2. 编写 / 修改代码
正常开发、增删改文件、写功能。
- 新增文件:图标变为 蓝色加号
- 修改文件:图标变为 红色感叹号
- 删除文件:图标变为 红色叉号
3. 查看本地修改(Status 状态)
提交前建议先检查:改了哪些文件、有没有误改。
图形端
右键 → TortoiseSVN → Check for modifications 会列出:已修改、新增、删除、未纳入版本的文件。
命令行
svn status
# 简写 svn st
状态标识含义(高频):
- M:文件被修改
- A:文件新增(还未提交到服务器)
- D:文件删除
- ?:未被 SVN 托管的新文件(不会被提交)
4. 提交代码(Commit 提交)
开发完成、自测通过后,把本地改动上传到中央仓库。
图形端
命令行
# -m 后面跟提交备注(必须写)
svn commit -m "完成用户登录功能,修复验证码bug"
# 简写
svn ci -m "备注"
重要规则:严禁空备注提交,团队无法追溯改动。
四、新增 / 删除 / 重命名 文件(标准操作)
不要直接在系统里手动删 / 重命名文件,会导致 SVN 状态异常。
1. 新增文件
命令行:
svn add 文件名
svn ci -m "新增配置文件"
2. 删除文件
命令行:
svn del 文件名
svn ci -m "删除废弃工具类"
3. 重命名 / 移动文件
右键 → TortoiseSVN → Rename,改完直接提交。 命令行:
svn mv 旧名 新名
五、重中之重:解决代码冲突(Conflict)
多人修改同一个文件的同一行代码,更新 / 提交时就会产生冲突,工作最常见问题。
1. 冲突表现
- 图形端:文件图标变成 黄色三角感叹号
- 命令行:提示 C 文件名(C=Conflict)
2. 冲突文件说明
SVN 会自动生成 3 个临时文件(例:test.java 冲突):
打开冲突文件,会看到标记:
<<<<<<< .mine (你的代码)
String name = "张三";
======= (服务器别人的代码)
String name = "李四";
>>>>>>> .r1234
3. 三种解决方式(按场景选)
方式 1:手动合并(最常用、推荐)
方式 2:使用我的版本(丢弃服务器代码)
右键 → TortoiseSVN → Resolve → Resolve using my version 适合:确定自己代码是对的,覆盖别人改动。
方式 3:使用服务器版本(丢弃本地改动)
右键 → Resolve using theirs version 适合:本地改错,直接拉取线上版本。
经验:冲突优先沟通,和修改同文件的同事对齐逻辑,再合并,不要盲目覆盖。
六、回滚代码(撤销错误提交 / 本地改动)
分两种场景:撤销本地未提交改动、回滚已提交到服务器的代码。
场景 1:本地改坏了,未提交,恢复原样
图形端
右键项目 → TortoiseSVN → Revert,勾选文件,确定即可恢复成服务器版本。
命令行
svn revert 文件名
# 恢复整个目录所有改动
svn revert . -R
场景 2:代码已经提交到服务器,需要回滚版本
假设错误提交版本号是 100,要回到 99 版本:
命令行回滚指定版本:
# 回退到 99 版本
svn merge -r 100:99 .
svn ci -m "回滚版本100,修复线上bug"
SVN 是增量记录,回滚不会删除历史版本,所有记录都可追溯。
七、分支使用(团队迭代 / 上线必备)
企业常用分支模型:
- Trunk(主干):线上正式代码、稳定版本
- Branches(分支):开发新功能、迭代版本、测试版本
- Tags(标签):版本快照(上线打版本、归档,只读不修改)
1. 创建分支(从主干拉分支开发)
图形端:
命令行:
svn copy 主干地址 分支地址 -m "创建V2.0开发分支"
2. 分支合并(功能开发完,合并回主干)
分支测试通过后,把分支代码合并到主干:
3. 创建 Tag(上线归档)
逻辑同创建分支,地址放到 /tags/版本号,Tag 原则:只用来存档,禁止修改提交。
八、工作必备规范(团队协作红线)
九、常见问题 & 踩坑总结
十、常用命令行速查表(收藏)
svn co # 检出代码
svn up # 更新代码
svn st # 查看状态
svn ci # 提交代码
svn add # 新增文件
svn del # 删除文件
svn mv # 移动/重命名
svn log # 查看提交日志
svn revert # 撤销本地改动
svn merge # 合并分支/版本
svn info # 查看当前仓库地址、版本
