SVN 基本认识
- 定位:集中式版本控制系统,适合代码协作、版本追踪和备份。
- 核心概念:
- 仓库(Repository):服务器端的中央存储库,保存所有版本历史。
- 工作副本(Working Copy):用户本地的代码副本,与仓库交互。
- 提交(Commit):将本地修改上传到仓库。
- 更新(Update):从仓库拉取最新代码到本地。
- 分支(Branch):独立开发线,用于并行开发或隔离风险。
- 合并(Merge):将分支代码整合回主干。
- 与 Git 对比:
- 特性SVNGit架构集中式分布式网络依赖提交/更新需联网本地可完成大部分操作速度较慢(尤其是大仓库)快学习曲线简单较复杂适用场景小型团队、内部项目开源项目、大型协作
2. 安装与配置
- 安装 SVN 客户端
- Windows:推荐 TortoiseSVN(图形化工具 + 命令行集成)。
- Linux/macOS:通过包管理器安装:
# Ubuntu/Debian
sudo apt-get install subversion
# macOS (需先安装 Homebrew)
brew install svn
- 配置用户信息(可选)
编辑 ~/.subversion/config 文件,设置默认用户名和密码:
[auth]
username = your_name
password = your_password
3. 核心操作命令
仓库操作
命令 | 作用 |
svnadmin create /path/to/repo | 创建新仓库 |
svnserve -d -r /path/to/repo | 启动 SVN 服务(默认端口 3690) |
本地工作流
命令 | 作用 |
svn checkout <仓库URL> [目录] | 检出代码到本地(简写 svn co) |
svn update | 更新本地代码到最新版本 |
svn add <文件/目录> | 将新文件纳入版本控制 |
svn commit -m "日志" | 提交修改到仓库(简写 svn ci) |
svn status | 查看本地修改状态 |
svn log | 查看提交历史 |
svn diff | 查看文件修改内容 |
svn revert <文件> | 撤销本地未提交的修改 |
4. 分支与合并
- 创建分支
svn copy <主干URL> <分支URL> -m "创建分支"
svn checkout <分支URL> # 切换到分支
- 合并分支到主干
svn checkout <主干URL>
svn merge <分支URL> # 在主干目录执行
svn commit -m "合并分支"
- 解决冲突
- 冲突文件会标记为 C,手动编辑后执行:
svn resolved <冲突文件> # 标记冲突已解决
svn commit -m "解决冲突"
5. 图形化工具(TortoiseSVN)
- 右键菜单集成:通过文件资源管理器的右键菜单完成所有操作。
- 关键功能:图标覆盖:文件状态通过图标颜色显示(如绿色√=已同步,红色!=冲突)。
- 日志查看:图形化显示提交历史、修改详情。
- 差异对比:内置对比工具,支持文本和二进制文件。
6. 高级技巧
- 忽略文件
编辑仓库的 svn:ignore 属性,忽略临时文件(如 .class, .idea):
svn propset svn:ignore "*.class" .
svn commit -m "忽略.class文件"
- 回滚版本
svn merge -r 当前版本号:目标版本号 .
svn commit -m "回滚到版本X"
- 权限控制
修改仓库的 conf/svnserve.conf 和 conf/passwd 文件,配置用户访问权限。
7. 常见问题
- “工作副本已锁定”错误
执行清理命令:
svn cleanup
- 提交冲突
优先沟通团队协作,避免多人同时修改同一文件。
使用 svn update 及时同步代码。
- 大文件存储效率低
SVN 不适合管理二进制大文件(如图片、视频),考虑使用 Git LFS 或专用工具。
8. 适用场景建议
- 适合 SVN:
- 内部项目管理,需简单权限控制。
- 非代码文件(如设计稿)的版本追踪。
- 团队对 Git 不熟悉,需快速上手。
- 建议转向 Git:
- 需要频繁离线开发。
- 大型开源项目协作。
- 复杂分支策略(如 Git Flow)