尚硅谷SVN高级教程(svn操作详解)

86 阅读3分钟

bb8e91f0e059c9df23aa764d038b69683546592227363340.jpg 尚硅谷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 日常开发操作流程

  1. 首次获取代码
svn checkout svn://server-ip/project1/trunk --username=yourname
  1. 每日更新代码
svn update
# 推荐添加定时提醒(Windows批处理示例)
@echo off
echo 记得先更新代码再开始工作!
pause
  1. 提交更改
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 冲突解决步骤

  1. 更新时发现冲突
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: 
  1. 查看冲突文件内容
# 冲突文件会包含标记
<<<<<<< .mine
// UserB的修改内容
=======
// UserA的修改内容
>>>>>>> .r123
  1. 解决方案选择
选项命令适用场景
手动合并直接编辑文件需要保留双方修改
保留我的svn resolve --accept=mine我的修改优先级高
保留他人svn resolve --accept=theirs他人修改更合理
比较差异svn diff --diff-cmd meld需要可视化对比
  1. 标记为已解决
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的错误修改"

七、最佳实践建议

  1. 提交规范

    • 关联任务单号(如JIRA-123)
    • 单次提交只完成一个功能/修复
    • 提交前运行单元测试
  2. 目录权限控制(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

通过以上全流程管理策略,团队可以高效协作并有效控制代码质量。建议配合代码审查制度和定期备份机制,确保版本控制系统稳定可靠运行。