SVN 解决冲突

SVN 冲突解决全流程(2025 年最新、最清晰、最实用的实战指南)

1. 什么时候会产生冲突?

  • 你和别人同时修改了同一文件的同一行(或相邻几行)
  • 你修改了文件 A,别人删除了文件 A
  • 你删除了文件 B,别人修改了文件 B

2. 冲突的 3 种类型与表现

类型提示符号说明
文本冲突(C)C同一行内容被不同人修改
属性冲突C文件属性(如 svn:ignore、svn:eol-style)冲突
树冲突(Tree Conflict)C文件/目录的增删改与别人操作冲突(最常见、最麻烦)

3. 解决冲突的完整 6 步流程(99% 的情况都这么干)

# 第1步:先更新到最新版本(冲突通常在 update 或 merge 时出现)
svn update
# 看到类似:
# Conflict discovered in 'src/utils.cpp'.
# Select: (p) postpone, (df) diff-full, (r) resolved, ...

# 第2步:查看冲突内容(3个临时文件会自动生成)
svn diff src/utils.cpp
# 或者用工具看:
# Windows → TortoiseSVN → Right-click → Edit conflicts
# macOS → CornerStone / Versions / SnailSVN
# Linux → meld, kdiff3, vimdiff

SVN 会生成 4 个文件(以 utils.cpp 为例):

utils.cpp              ← 当前工作副本(乱码版)
utils.cpp.mine         ← 你本地的修改(没更新前)
utils.cpp.rOLD         ← 旧版本(你修改前的基线)
utils.cpp.rNEW         ← 服务器最新版本(别人提交的)

内容长这样:

<<<<<<< .mine
    return calculateNewWay(data);
=======
    return calculateFastWay(data);   // by lisi
>>>>>>> .r1567

第3步:手动编辑文件,去掉<<<<<<< ======= >>>>>>> 标记,保留你想要的最终代码

第4步:标记为已解决(必须执行!否则不能 commit)

svn resolved src/utils.cpp          # 老版本写法(1.8 以前)
# 或新版本(推荐,所有情况都适用)
svn resolve --accept working src/utils.cpp

第5步:常用的一键解决方式(根据场景选择)

# 场景1:直接用我的代码覆盖(我知道我是对的)
svn resolve --accept mine-full 冲突文件

# 场景2:直接用服务器最新的代码(我改错了,放弃本地)
svn resolve --accept theirs-full 冲突文件

# 场景3:已经手动编辑好了,告诉 SVN 我搞定了
svn resolve --accept working 冲突文件

# 场景4:批量解决当前目录所有冲突(小心使用!)
svn resolve --accept working -R .

第6步:提交

svn commit -m "fix conflict in utils.cpp"

4. 树冲突(Tree Conflict)最容易出错,重点讲解

常见树冲突场景及一键解决方法:

场景提示最快解决命令
你修改了文件,别人删了它local edit, incoming deletesvn resolve –accept theirs-full 文件
你删了文件,别人修改了它local delete, incoming editsvn resolve –accept mine-full 文件(保留删除)
你新增了文件,别人也新增同名文件local add, incoming add手动改名或合并内容后 resolve –accept working
目录被别人删了,你在里面改了文件local edit, incoming delete通常回退或重新建目录

5. 推荐工具(彻底告别手改)

系统推荐工具操作方式
WindowsTortoiseSVN右键 → Edit conflicts → 点 Merge
macOSCornerStone、SnailSVN、Versions自动弹出三窗对比界面
LinuxMeld、KDiff3、vimdiff配置 svn 的 merge-tool
所有系统VS Code + SVN 插件直接在编辑器里点按钮解决

6. 预防冲突的最佳实践(强烈建议团队遵守)

  1. 开发前先 svn update
  2. 不要长时间不提交(超过 1 天就要 commit)
  3. 大改动先开分支(feature branch)
  4. 关键文件加锁机制(svn lock)—— 适用于二进制文件(如 .psd、.docx)
   svn lock config.xml -m "editing"

掌握上面这套流程后,SVN 冲突就再也不是问题了,3 分钟内必解决。

如果你现在正卡在一个具体的冲突,
直接把 svn statussvn info 的输出贴出来(或者截个 TortoiseSVN 的冲突窗口),我 30 秒给你最精确的一句解决命令。

文章已创建 2637

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部