尚硅谷SVN高级教程(svn操作详解)---789it.top/13538/
SVN 团队协作实战:多人开发代码管理与冲突解决全流程
一、SVN基础环境搭建
1.1 服务器端安装与配置
# CentOS安装SVN服务
yum install -y subversion
# 创建版本库
mkdir -p /var/svn/repos
svnadmin create /var/svn/repos/project1
# 配置访问权限
vi /var/svn/repos/project1/conf/svnserve.conf
关键配置项:
[general]
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz
1.2 客户端工具选择
- Windows推荐:TortoiseSVN + Language Pack
- Mac推荐:SnailSVN(AppStore)或命令行
- IDE插件:Eclipse/IntelliJ IDEA的Subversion插件
二、标准团队开发流程
2.1 代码仓库目录结构规范
project/
├── trunk/ # 主线开发分支
├── branches/ # 功能分支
│ ├── feature-A
│ └── hotfix-B
├── tags/ # 版本标记
│ ├── v1.0.0
│ └── v1.1.0
└── docs/ # 项目文档
2.2 日常开发操作流程
- 首次获取代码:
svn checkout svn://server-ip/project1/trunk --username=yourname
- 每日更新代码:
svn update
# 推荐添加定时提醒(Windows批处理示例)
@echo off
echo 记得先更新代码再开始工作!
pause
- 提交更改:
svn commit -m "JIRA-123 修复登录页面样式问题"
三、分支管理策略
3.1 创建功能分支
svn copy svn://server-ip/project1/trunk \
svn://server-ip/project1/branches/feature-user-auth \
-m "创建用户认证功能分支"
3.2 分支合并流程
# 1. 切换到主干
svn switch svn://server-ip/project1/trunk
# 2. 执行合并(注意使用--dry-run先测试)
svn merge --reintegrate svn://server-ip/project1/branches/feature-user-auth
# 3. 解决可能出现的冲突
svn resolved <冲突文件>
# 4. 提交合并
svn commit -m "合并用户认证功能到主干"
四、冲突解决全流程
4.1 冲突产生场景模拟
UserA修改了文件:src/main.java (Line 50-60)
↓
同时UserB也修改了同一区域
↓
UserB提交时出现冲突
4.2 冲突解决步骤
- 更新时发现冲突:
svn update
# 输出提示:
Conflict discovered in 'src/main.java'.
Select: (p) postpone, (df) diff-full, (e) edit,
(mc) mine-conflict, (tc) theirs-conflict,
(s) show all options:
- 查看冲突文件内容:
# 冲突文件会包含标记
<<<<<<< .mine
// UserB的修改内容
=======
// UserA的修改内容
>>>>>>> .r123
- 解决方案选择:
| 选项 | 命令 | 适用场景 |
|---|---|---|
| 手动合并 | 直接编辑文件 | 需要保留双方修改 |
| 保留我的 | svn resolve --accept=mine | 我的修改优先级高 |
| 保留他人 | svn resolve --accept=theirs | 他人修改更合理 |
| 比较差异 | svn diff --diff-cmd meld | 需要可视化对比 |
- 标记为已解决:
svn resolve --accept=working src/main.java
svn commit -m "解决main.java冲突"
五、高级团队协作技巧
5.1 变更列表管理
# 创建变更列表
svn changelist fix-bugs src/utils/bug*.java
# 查看当前变更列表
svn changelist
# 提交特定变更列表
svn commit --changelist fix-bugs -m "修复紧急bug"
5.2 代码审查辅助
# 创建补丁文件
svn diff > feature-A.patch
# 应用补丁(用于代码审查)
patch -p0 < feature-A.patch
# 查看变更历史(带差异)
svn log -v -r 100:HEAD --diff
六、常见问题解决方案
6.1 文件锁定问题
# 检查锁定状态
svn status --show-updates
# 强制解锁(需要管理员权限)
svn unlock --force src/main.java
# 预防措施:设置需要锁定的文件类型
svn propset svn:needs-lock "*.docx" docs/
6.2 回退错误提交
# 查看提交历史
svn log --limit 5
# 回退到指定版本
svn merge -c -123 svn://server-ip/project1/trunk
# 提交回退
svn commit -m "回退r123的错误修改"
七、最佳实践建议
-
提交规范:
- 关联任务单号(如JIRA-123)
- 单次提交只完成一个功能/修复
- 提交前运行单元测试
-
目录权限控制(authz示例):
[project1:/trunk]
@dev-team = rw
@test-team = r
[project1:/branches/feature-*]
@dev-team = rw
* =
[project1:/tags]
@release-manager = rw
3. 自动化集成:
# 使用post-commit钩子自动触发构建
vi /var/svn/repos/project1/hooks/post-commit
#!/bin/sh
/usr/bin/curl -X POST http://ci-server/job/project1/build
通过以上全流程管理策略,团队可以高效协作并有效控制代码质量。建议配合代码审查制度和定期备份机制,确保版本控制系统稳定可靠运行。