一. 发生冲突的条件
假设两个人A和B都更新了文件hello.txt.
都是在最后一行添加了一些文件.
A先提交到服务器.
然后B再提交到服务器则会提交失败.原因是B的文件hello.txt过时了:服务器中的版本高于B的计算机中的版本.

所以:
我们提交文件到服务器之前, 必须先更新到最新的版本.
那就先update吧, 这是就发生了冲突: 因为服务上的文件的最后一行和B本地的最后一行不一致, 所以就发生了冲突.

总结:
某个文件发生冲突的充要条件就是: 本地文件和服务器文件内容不一致, 并且不一致的地方发生在同一行.
如果不一致的地方没有在同一行, 则也不会发生冲突, svn会自动合并.
工作副本中文件的几种状态
关于文件的版本: 每向服务器commit成功一次, 文件的版本就会增加1 (r1, r2, r3)
①没有修改,现行版本
本档案在工作目录中没有被修改,而且自当前版本之后,其他终端也没有任何该文件的修改被提交到服务器,即当前工作副本的版本和服务器端最新版本是一致的。对它执行svn commit和svn update都不会发生任何事。
②本地修改, 现行版本
这个文件被修改过,但这个修改还没有提交到服务器,而且自当前版本之后,其他终端也没有任何该文件的修改被提交到服务器,所以当前工作副本的版本和服务器端最新版本仍然是一致的。由于有尚未送交回去的本地修改,所以对它的 svn commit会成功提交你的修改,而 svn update 则不会作任何事。
③没有修改,过时版本
这个文件没有修改,但是版本库中有其他终端提交的修改。此时当前工作副本的版本比服务器端的版本落后了,我们称之为“过时”。对当前文件的 svn commit 不会发生任何事,而 svn update 会让工作目录中的文件更新至最新版本。
④本地修改,过时版本
服务器端存在没有更新到本地的修改,导致当前版本过时。如果这个文件在本地有未提交的修改,则无法提交,对它执行svn commit 会产生“out-of-date”错误。
此时应该先尝试更新本地文件。更新时SVN会尝试将服务器端的更新与本地文件进行合并,合并的结果有两种可能:一个是服务器端和本地修改位于文件的不同位置,合并成功;另一个是服务器端的修改正好和本地修改位于同一个位置,发生冲突。
二. 解决冲突
2.1 冲突发生每个文件的含义

2.2 解决冲突
使用svn自带的解决冲突的工具


使用文本编辑器手动解决冲突

然后表明已经解决.

然后再提交.
三. 如何避免冲突
在实际开发过程中, 可以尽量减少冲突, 但是不能完全避免冲突. 只要有协同开发, 就一定会发生冲突.
在你准备修改一个文件之前, 尽量先
update, 然后再修改.锁定文件. 使用较少.