一、SVN冲突的常见场景

当多个开发人员同时修改同一个文件时,SVN就会提示冲突。比如,小王修改了utils.py的第10行代码,而小李在同一时间也修改了这一行。提交时,SVN会直接报错:

# 技术栈:SVN命令行
svn commit -m "修改工具函数"
# 输出错误提示:
svn: E155011: 文件 'utils.py' 存在冲突

冲突通常发生在以下场景:

  1. 并行修改:两人修改同一文件的同一区域
  2. 删除冲突:一人删除文件时,另一人正在修改该文件
  3. 属性冲突:文件权限或属性被不同人修改

二、快速识别冲突类型

通过svn status命令可以查看冲突文件状态:

# 技术栈:SVN命令行
svn status
# 输出示例:
!     C utils.py
      >  本地修改,服务器版本冲突

文件状态标记说明:

  • C:内容冲突(最常见)
  • !:文件丢失或异常
  • A:新增文件冲突

三、手动解决冲突的完整流程

3.1 查看差异

使用svn diff对比本地与服务器版本:

# 技术栈:SVN命令行
svn diff utils.py
# 输出示例:
@@ -10,7 +10,11 @@
<<<<<<< .mine
  def calculate(a, b):
=======
  def compute(a, b):
>>>>>>> .r123

3.2 合并策略选择

  1. 接受本地版本(当确定自己的修改更合理时):
svn resolve --accept mine-full utils.py
  1. 接受服务器版本(当需要放弃本地修改时):
svn resolve --accept theirs-full utils.py
  1. 手动合并(推荐):直接编辑文件,删除<<<<<<<等标记后保存

3.3 标记为已解决

完成合并后必须执行:

svn resolve --accept working utils.py
svn commit -m "解决utils.py冲突"

四、高级合并技巧

4.1 使用外部合并工具

配置diff-cmd使用Beyond Compare:

# 技术栈:SVN配置
vim ~/.subversion/config
# 添加:
[helpers]
diff-cmd = /usr/bin/bcompare

4.2 预防冲突的最佳实践

  1. 频繁更新:每天开始工作前先执行svn update
  2. 小颗粒提交:每次提交只包含一个功能修改
  3. 沟通机制:修改公共文件前在团队群内通知

五、特殊场景处理

5.1 目录冲突解决

当目录结构发生变化时:

svn update --accept theirs-full conflicting_dir

5.2 二进制文件冲突

对于图片、PDF等二进制文件,必须明确选择版本:

svn resolve --accept mine-full image.png

六、技术方案对比

方法 优点 缺点
手动合并 精确控制结果 耗时
接受本地版本 快速 可能覆盖他人合法修改
使用外部工具 可视化操作 需要额外安装软件

七、注意事项

  1. 永远不要直接删除冲突文件(会丢失所有修改)
  2. 解决冲突后必须执行svn resolve
  3. 二进制文件冲突不能自动合并

八、总结

掌握SVN冲突解决是团队协作的基本功。关键记住三点:及时更新、小步提交、明确沟通。遇到冲突时保持冷静,按照"识别→对比→合并→标记"的流程操作即可。