Chinaunix首页 | 论坛 | 博客
  • 博客访问: 312315
  • 博文数量: 96
  • 博客积分: 230
  • 博客等级: 二等列兵
  • 技术积分: 722
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-13 22:25
个人简介

心安处即吾乡!

文章分类

全部博文(96)

文章存档

2016年(1)

2014年(79)

2013年(7)

2012年(9)

我的朋友

分类: LINUX

2014-06-17 10:46:41

这里,先说说冲突解决。

怎么会发生冲突呢?

两个人修改了不同文件?不会有冲突,他们不相关。

两个人同时修改了同一个文件的不同位置?不会有冲突,SVN很聪明。

两个人同时修改了同一个文件的相同位置?Bing!冲突来了。

工程师A修改了a.txt的第一行,提交了。

工程师B也修改了a.txt的第一行,然后执行svn up,这时SVN提示了:(以下,你开始扮演工程师B的角色了)
$ svn up
在 “a.txt” 中发现冲突。
选择: (p) 推迟,(df) 显示全部差异,(e) 编辑,
(mc) 我的版本, (tc) 他人的版本,
(s) 显示全部选项:

我一般选择p(推迟),即引入冲突到本地,不过不会影响到SVN服务器端,可以放心。

OK,开始解决冲突了。

这时,会生成几个文件:

a.txt  a.txt.mine  a.txt.r6328  a.txt.r6336

其中a.txt中包含了工程师A、B的所有修改,以<<<<<<<、=======、>>>>>>>分隔。

a.txt.mine是工程师B的修改,也就是未update前的a.txt。

a.txt.r6328 是工程师A提交前的版本,即未导致冲突的版本。

a.txt.r6336是工程师A提交后的版本,即导致冲突的版本。

一般,查看a.txt就可以看到冲突的详情了:

[yicheng@chengyi svntest]$ cat a.txt

<<<<<<< .mine

i also modify ,agndagnagasdg;

=======

i modify this line;

>>>>>>> .r6336

以上,<<<<<<< .mine和=======之间是工程师B(当前的“你”)修改的内容,=======与>>>>>>> .r6336之间是工程师A修改的内容。这时,最好的办法是,叫上工程师A,你们一起确定这些修改是否都需要,是否相互兼容,然后留下需要的部分,删 除<<<<<<< .mine、=======和>>>>>>> .r6336。

然后,测试,测试!确定没问题之后,就可以告诉SVN,你解决冲突了:

svn resolve --accept working a.txt (该命令会删除a.txt.mine  a.txt.r6328  a.txt.r6336)

svn ci -m ’some comment’ a.txt

这里需要注意的是,a.txt.mine  a.txt.r6328  a.txt.r6336这几个文件的存在代表着有冲突产生。如果不解决冲突,就手 工删除它们,SVN服务器也会很傻的认为你解决了冲突,允许你继续之后 的工作。但是,冲突依旧存在,你的a.txt中不但有别人的修改,还有那些讨厌的<=>符号。

在冲突未解决前,试图提交代码是肯定会失败的:

$ svn ci -m ”

svn: 提交失败(细节如下):

svn: 提交终止: “/path/to/svntest/a.txt” 处于冲突状态

----------------------------------------------------------------------------------------------------------------
除了合并不同至文件test.txt中,然后使用svn resolve --accept working a.txt解决冲突外,还能使用svn resolve -accept 加其他参数[共6个]来解决冲突 

(1)#svn resolve --accept base 
Choose the file that was the BASE revision before you updated your working copy. That is, the file that you checked out before you made your latest edits. 
使用a.txt.r6328作为最后提交的版本 

(2)#svn resolve --accept working 
Assuming that you've manually handled the conflict resolution, choose the version of the file as it currently stands in your working copy. 
使用当前拷贝即a.txt作为最后提交的版本 

(3)#svn resolve --accept mine-full 
Resolve all conflicted files with copies of the files as they stood immediately before you ran svn update. 
使用a.txt.mine作为最后提交的版本 

(4)#svn resolve --accept theirs-full 
Resolve all conflicted files with copies of the files that were fetched from the server when you ran svn update. 
使用a.txt.r6336作为最后提交的版本 

(5)#svn resolve --accept mine-conflict 
冲突的部分以本地修改为准 

(6)#svn resolve --accept theirs-conflict 
冲突的部分以服务器端修改为准 

执行一下:svn resolved a.txt 告知svn删除工作副本中目录或文件的“冲突”状态。

Now you are ready to commit. 
然后提交 

svn ci -m "conflict resolved" 

阅读(6608) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~