版本冲突原因:
假设a,b两个用户都在版本号为100的时候,更新了test.txt这个文件,a用户在修改完之后提交到服务器,这个时候test.txt的版本号已经变成了101了。同时b用户在版本号为100的test.txt上做修改,然后提交到服务器,由于不是在当前最新的101版本上做的修改,所以导致提交失败。
版本冲突现象:
冲突发生时,subversion会在当前工作目录保存所有的目标文件版本【上次更新版本,当前获取的版本(即别人提交的本本),自己更新的版本,目标文件】。
假设文件名是test.txt
对应的文件名分别是:
test.txt.r100
test.txt.r101
test.txt.mine
test.txt
使用Cornerstone会在目标文件标记来自不同用户的更改:
<<<<<<< .mine
你更改的代码=======
别人更改并已经提交到服务器的代码>>>>>>> .r101
其中<<<<<<< .mine与=======之间表示A修改后的内容,=======与>>>>>>>
.r101之间是版本服务器上的版本
解决冲突的方法:
和同事沟通后,如果采用自己更改的代码则手动删除他人的代码和多余的符号,然后提交。
如果采用他人的代码则删除自己的代码和多余的符号,然后提交。
使用终端svn不会在目标文件标记冲突内容,而是会在输入 svn up 更新命令后输出提示信息:
Select: (p) postpone, (df) diff-full, (e) edit,
(mc) mine-conflict, (tc) theirs-conflict,
(s) show all options:
输入df命令可以查看冲突的内容。
输入mc命令是采用自己的更改。
输入tc命令是采用他人的更改。
至此,更新完成。接下来就是提交的过程。
另外一种方法就是revert回滚:
恢复到上一次更新的代码,相当于放弃了本次自己更改的内容。