SVN冲突解决详解

来源:互联网 发布:怎么办我爱你网络歌手 编辑:程序博客网 时间:2024/05/16 18:48
SVN冲突的现象

1、现在A、B两个用户都更新kingtuns.txt文件到本地。

1

2、文档中原始文件内容如下:

2

3、A用户修改文件,添加内容“A用户修改内容”完成后提交到服务器

3

4

4、B用户修改文件,添加内容“B用户修改内容”完成后提交到服务器

5

B用户提交更新至服务器时提示如下:

6

 

冲突的原因

当开发人员A和开发人员B从版本库同时检出文档1.txt,而A和B都修改了1.txt的同一地方,后提交的一方会在拷贝副本中产生冲突。

两个工作拷贝,A拷贝中文件1.txt内容为

dfqerq
123dfwre

B拷贝中文件1.txt内容为

dfqerq
123erwrq

在B版本提交之前版本库上的1.txt(base版本)内容为

dfqerq

B拷贝先提交版本到版本库中,以至于最新版本内容变为

dfqerq
123erwrq

此时A版本也提交则会产生冲突,无法提交,需要先svn update,此时会在A拷贝中产生三个临时文件1.txt.rNew\1.txt.rOld\1.txt.mine,其中1.txt.rNew是最新版 本,1.txt.rOld是base版本,1.txt.mine是A作者修改后的版本,在此例中内容为

dfqerq
123dfwre

而update之后A拷贝中的1.txt内容为

<<<<<<< .mine
dfqerq
123dfwre=======
dfqerq
123erwrq>>>>>>> .r18

其中<<<<<<< .mine与=======之间表示A修改后的内容,=======与>>>>>>> .r18之间是版本服务器上的版本


B用户将文件提交至服务器时,提示版本过期:首先应该从版本库更新版本,然后去解决冲突,冲突解决后要执行svn resolved(解决),然后在签入到版本库。在冲突解决之后,需要使用svn resolved(解决)来告诉subversion冲突解决,这样才能提交更新。

 

解决冲突有三种选择:

 

A、放弃自己的更新,使用svn revert(回滚),然后提交。在这种方式下不需要使用svn resolved(解决)

 

B、放弃自己的更新,使用别人的更新。使用最新获取的版本覆盖目标文件,执行resolved filename并提交(选择文件—右键—解决)。

 

C、手动解决:冲突发生时,通过和其他用户沟通之后,手动更新目标文件。然后执行resolved filename来解除冲突,最后提交。

 

解决步骤如下:

1、  在当前目录下执行“update”(更新)操作

 

 7

2、  在冲突的文件上(选中文件--右键菜单—TortoiseSVN—Edit conflicts(解决冲突)),出现如下窗口

 

Theirs窗口为服务器上当前最新版本

Mine窗口为本地修改后的版本

Merged窗口为合并后的文件内容显示

     8

3、  如果要使用服务器版本,在Theirs窗口选中差异内容,右键,选择Use this text block(使用这段文本块)。

同理如果要使用本地版本,在协商后,在Mine窗口右键,选择Use this text block(使用这段文本块)。

 

    9

4、  修改完成后,保存kingtuns.txt文件内容。

 

5、  在B用户的冲突目录下,选中文件--右键菜单—TortoiseSVN—Resolved(解决)。会列出冲突的文件列表,如果确认已经解决,点OK。

10

 

6、  冲突解决

 

      11

7、提交解决冲突后的文件。

 

 12

 

 

如何降低冲突解决的复杂度:

1、当文档编辑完成后,尽快提交,频繁的提交/更新可以降低在冲突发生的概率,以及发生时解决冲突的复杂度。

2、在提交时,写上明确的message,方便以后查找用户更新的原因,毕竟随着时间的推移,对当初更新的原因有可能会遗忘

3、养成良好的使用习惯,使用SVN时每次都是先提交,后更新。每天早上打开后,首先要从版本库获取最新版本。每天下班前必须将已经编辑过的文档都提交到版本库。

0 0