关闭

SVN文件冲突解决方法

标签: svn
1148人阅读 评论(0) 收藏 举报

原文:  http://blog.sina.com.cn/s/blog_6dc4dbed01018jlo.html

 

SVN是很好的开源软件,普及度很广,但是使用中最头疼的无异于冲突问题与处理。下面来对这些头疼问题一一作出解答。包含三个系列,冲突简介、文件冲突与解决实例、树冲突与解决实例。

  多人并行开发操作svn时,经常会遇到各种冲突,包括文件冲突(text conflict)与树冲突(tree conflict)。
  文件冲突:多人同时修改同一文件相同位置为不同内容时,会造成文件冲突。解决方式有两种,svn update与手动解决。
  树冲突:
当一名开发人员移动、重命名、删除一个文件或文件夹,而另一名开发人员也对它们进行了移动、重命名、删除或者仅仅是修改时就会发生树冲突。

svn status — 打印工作拷贝文件和目录的状态。
详情请参考svn status命令详述

 

 

 

文件冲突:多人同时修改同一文件的相同位置时,可能会造成文件冲突。解决方式有两种,svn update与手动解决。

一、文件冲突解决方式

1. 利用update自动解决冲突,即不管当前工作副本内容是否是最新版本,都使用--accept参数作为冲突处理方式。所有参数含义解释如下:

--accept ARG : specify automatic conflict resolution action

('postpone', 'base', 'mine-conflict',

'theirs-conflict', 'mine-full', 'theirs-full',

's')

(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)//丢弃你对查看文件的本地修改,只使用从服务器新接收的变更。

(s) show all options 显示所有选项

2. update时不解决冲突,利用svn resolve解决冲突,两种方式

1) 利用svn resolve --accept base选择base版本,即a.txt.rOld作为最后提交的版本

--accept ARG : specify automatic conflict resolution source

('base', 'working', 'mine-conflict',

'theirs-conflict', 'mine-full', 'theirs-full')

2) 手工修改本地文件,然后将当前拷贝如test.txt作为最后提交的版本

svn resolve --accept working test.txt

svn resolve --accept theirs-full test.txt 使用test.txt.rNew作为最后提交的版本

svn resolve --accept mine-full test.txt 使用test.txt.mine作为最后提交的版本

svn resolve --accept mine-conflict test.txt 使用test.txt.mine的冲突部分作为最后提交的版本

svn resolve --accept theirs-conflict test.txt 使用test.txt.rNew的冲突部分作为最后提交的版本

二、冲突实例

A与B同时修改test.txt文本中同一行内容,但是A先提交。B在提交前进行更新,会出现冲突提示,选项、出现冲突的文件。最后文件冲突标识text conflict,如图所示:

如果选项选择P,则本地工作副本会产生3个临时文件,test.txt.mine test.txt.r1(Old版本)test.txt.r2(rNew版本)。其中r(Old)版本是base版本,r(New)是最新版本,r(mine)是B本地修改的版本。打开test.txt版本,会看到冲突文件的标识。<<<<<<< .mine与=======之间表示B修改后的内容,=======与>>>>>>> .r2之间是服务器上的版本。

如果手动解决该冲突文件,然后使用修改完毕的文件提交时,可以这样做,修改test.txt文件后,删除那些冲突标识<<<<<<< .mine、=======、=======与>>>>>>> .r2后,执行svn resolve --accept working test.txt后,最后ci提交。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:91978次
    • 积分:1437
    • 等级:
    • 排名:千里之外
    • 原创:40篇
    • 转载:71篇
    • 译文:0篇
    • 评论:31条
    文章分类
    最新评论