如何产生冲突
当开发人员A和开发人员B从版本库同时检出文档suvan.txt,而A和B同时修改了suvan.txt的同一地方,最后提交的一方会在拷贝副本中产生冲突。
两个工作拷贝,A拷贝中文件suvan.txt内容为
suvan
newsuvan
B拷贝中文件suvan.txt内容为
suvan
123suvan
在B版本提交之前版本库上的suvan.txt(base版本)内容为
suvan
B拷贝先提交版本到版本库中,以至于最新版本内容变为
suvan
123suvan
此时A版本也提交则会产生冲突,无法提交,需要先svn update,此时会在A拷贝中产生三个临时文件suvan.txt.rNew``suvan.txt.rOld``suvan.txt.mine
,其中suvan.txt.rNew
是最新版本,suvan.txt.rOld
是base版本,suvan.txt.mine
是A作者修改后的版本,在此例中内容为
suvan
newsuvan
而update之后A拷贝中的suvan.txt内容为
<<<<<<< .mine
suvan
newsuvan=======
suvan
123suvan>>>>>>> .r18
其中<<<<<<< .mine与=======之间表示A修改后的内容,=======与>>>>>>> .r18之间是版本服务器上的版本
解决冲突
第一种,利用update的选项进行冲突解决,也就是说不管当前拷贝副本是否是最新版本,都使用--accept参数作为冲突处理方式
--accept ARG : specify automatic conflict resolution action
('postpone', 'working', 'base', 'mine-conflict',
'theirs-conflict', 'mine-full', 'theirs-full',
'edit', 'launch')
(shorthand: 'p', 'mc', 'tc', 'mf', 'tf', 'e', 'l')
(p) postpone - mark the conflict to be resolved later //让文件在更新完成之后保持冲突状态。
(df) diff-full - show all changes made to merged file //使用标准区别格式显示base修订版本和冲突文件本身的区别。
(e) edit - change merged file in an editor //用你喜欢的编辑器打开冲突的文件,编辑器是环境变量EDITOR设置的。
(r) resolved - accept merged version of file //完成文件编辑之后,通知svn你已经解决了文件的冲突,它必须接受当前的内容—从本质上讲就是你已经“解决了”冲突。
(mf) mine-full - accept my version of entire file (ignore their change) //丢弃新从服务器接收的变更,并只使用你查看文件的本地修改。
(tf) theirs-full - accept their version of entire file (lose my changes) //丢弃你对查看文件的本地修改,只使用从服务器新接收的变更。
(l) launch - launch external tool to resolve conflict //启动一个外置程序来执行冲突解决,这需要一些预先的准备。
(h) help - show this list //显示所有在冲突解决时可能使用的命令。
第二种,在update时并不处理冲突,利用svn resolve解决冲突
1.利用svn resolve --accept base
选择base版本,即suvan.txt.rOld作为最后提交的版本
--accept ARG : specify automatic conflict resolution source
('base', 'working', 'mine-conflict',
'theirs-conflict', 'mine-full', 'theirs-full')
2.手工修改suvan.txt文件,然后将当前拷贝即suvan.txt作为最后提交的版本svn resolve --accept working suvan.txt
3.svn resolve --accept theirs-full suvan.txt
使用suvan.txt.rNew作为最后提交的版本
4.svn resolve --accept mine-full suvan.txt
使用suvan.txt.mine作为最后提交的版本
5.svn resolve --accept mine-conflict suvan.txt
使用suvan.txt.mine的冲突部分作为最后提交的版本
6.svn resolve --accept theirs-conflict suvan.txt
使用suvan.txt.rNew的冲突部分作为最后提交的版本
第三种,使用svn revert取消变更
您可以选择一种方式赞助本站
支付宝扫一扫
微信扫一扫