svn树冲突是文件或目录结构操作(如删除、重命名、新增)引发的矛盾,不产生行级冲突标记,但会阻断update和commit。识别时通过svn status查看带“>”的c状态,再依提示分析本地与远程操作意图,手动调整结构后用svn resolve --accept=working标记解决,最后验证并提交。

SVN树冲突不是代码行层面的差异,而是文件或目录结构操作(如删除、重命名、新增)之间的矛盾。它不会在文件里出现这类标记,因此容易被忽略,却会直接阻断<code>svn update和svn commit操作。
识别树冲突:看状态和提示信息
执行svn status时,树冲突文件/目录会显示为C(Conflict),但旁边还带一个>符号,例如:
C src/config.xml > local delete, incoming edit upon updateC docs/manual.pdf > local missing, incoming add upon merge
同时,svn update或svn merge命令输出中会出现类似提示:
> local delete, incoming edit upon update
> use 'svn resolve' to mark the conflict resolved
理解常见树冲突类型与含义
每种组合对应不同意图冲突,需先判断谁的操作更合理:
- 本地删除,远程编辑:你删了文件,别人改了它 → 要么恢复文件并合并修改,要么确认删除有效并接受远程改动
-
本地重命名,远程编辑:你把
A.java改成B.java,别人改了原A.java→ 需把修改内容迁移到B.java,或撤销重命名 -
本地修改,远程删除:你改了
utils.js,别人删了它 → 要么保留你的修改(新建同名文件)、要么放弃修改 -
本地新增,远程也新增同名文件:两人各自加了
README.md→ 需人工合并内容,保留一个
手动解决 + 正确标记已解决
树冲突无法靠自动合并完成,必须结合操作与命令:
- 根据冲突类型,在工作区执行对应动作:恢复被删文件、重命名回原名、复制修改到新文件、或删除重复新增项
- 确保工作副本中该路径的状态符合团队共识(例如:文件应存在且含最新逻辑)
- 运行命令标记为已解决:
svn resolve --accept working path/to/conflict
这是最安全的选择,表示“我已手动处理完毕” - 不要用
--accept theirs-conflict或--accept mine-conflict直接覆盖——它们只适用于结构冲突的裁决,不保证内容完整
验证并提交
标记后务必验证:
- 再次运行
svn status,确认该路径不再显示C >,而变为正常状态(如M、A或空) - 检查文件是否存在、内容是否正确、目录结构是否合理
- 执行
svn commit -m "resolve tree conflict: xxx",提交前可加--dry-run预检
若仍报错,说明未真正消除结构矛盾,需回到第二步重新分析操作意图。











