SVN 解决冲突(七)

7.解决冲突

一、冲突产生原因

  • 两个用户(A 和 B)基于同一个旧版本(如版本 100)修改了同一个文件
  • A 先提交成功,仓库版本变为 101。
  • B 基于旧的版本 100 修改后提交,由于不是基于最新版本,提交失败,产生冲突。

二、冲突解决步骤

HelloWorld.html 为例

1. 修改文件并尝试提交

# 编辑 HelloWorld.html
cat HelloWorld.html
HelloWorld! http://www.runoob.com/

# 查看本地修改
svn diff

提交时失败:

svn commit -m "change HelloWorld.html first"
# 错误:File '/trunk/HelloWorld.html' is out of date

2. 更新工作副本(触发冲突)

svn update

输出示例:

C    HelloWorld.html
Updated to revision 6.
Conflict discovered in file 'HelloWorld.html'.
Select: (p) postpone, (df) show diff, (e) edit file, (m) merge,
        (mc) my side of conflict, (tc) their side of conflict,
        (s) show all options: mc
Resolved conflicted state of 'HelloWorld.html'

3. 冲突选项说明

选项 含义
p (postpone) 暂缓处理,稍后手动解决
df (show diff) 显示冲突双方的差异
e (edit file) 直接编辑冲突文件
m (merge) 自动合并(尝试)
mc (my side) 以本地(我的)版本为准
tc (their side) 以仓库(他们的)版本为准
s (show all) 显示所有选项

本例中选择 mc​,即保留本地修改,丢弃仓库中的变更。

4. 提交成功

svn commit -m "change HelloWorld.html second"
# Committed revision 7.

三、补充命令

  • 更新到指定版本(跳过冲突):

    svn update -r6

四、核心要点

  • 冲突是协作开发的正常现象,不要强行提交
  • 标准流程:svn update​ → 选择冲突处理策略 → svn commit
  • 养成提交前先 update 的习惯,可有效减少冲突概率。