我做svn更新时解决合并冲突

Ste*_*eam 23 svn

我正在尝试学习Eric Sink的版本控制基础知识 - http://ericsink.com/vcbe/vcbe_usletter_lo.pdf

我现在在第22页.我会为你描述一下这个场景.同一台计算机上的两个用户harry和sally正在处理一个名为lottery.c的文件,该文件存储在一个名为lottery的仓库中.

1 - Harry提交第一个/初始代码.2 - Sally更改并提交.3 - 虽然2正在发生,但哈里已经做出了改变,但没有做出改变.4 - Harry承诺并收到错误.

Transmitting file data .svn: Commit failed (details follow):
svn: File '/lottery.c' is out of date
Run Code Online (Sandbox Code Playgroud)

5 - 为了解决这个问题,哈里将使用更新他的本地副本svn update.

这是我遇到问题的地方!作者说输出是:

lottery harry$ svn update
G lottery.c
Updated to revision 2.
Run Code Online (Sandbox Code Playgroud)

但是,我的输出是:

lottery harry$ svn update
Updating '.':
C    lottery.c
Updated to revision 2.
Conflict discovered in file 'lottery.c'.
Select: (p) postpone, (df) show diff, (e) edit file, (m) merge,
        (mc) my side of conflict, (tc) their side of conflict,
        (s) show all options:
Run Code Online (Sandbox Code Playgroud)

我是新人,我不知道如何回应这条消息.我的书错了吗?请帮我.谢谢.

Dav*_* W. 43

当您有多个人同时更改同一个文件时,两者都很可能更改相同的行.这就是发生在你身上的事.莎莉改变了哈利改变的方式.当哈利做的时候svn update,Subversion发现了这个,并且问你该怎么做.

一句警告:有时Subversion只是在查找版本与版本之间的差异,而不是有意义的差异.例如,如果更改了行的缩进,或者间距不同,或者更改了行结尾,则Subversion会将此声明为冲突,即使它可能不是.这可能就是为什么这本书没有找到这个问题,但你做到了.并不意味着你做错了什么.

该怎么办?Subversion给你一些选择.

  • 推迟 p:这是我通常对这种情况所做的事情.Subversion将嵌入文件中的文件diff标记:

 

<<<<<<< .mine
foobar
=======
fubar
>>>>>>> .rxxx
Run Code Online (Sandbox Code Playgroud)

这将向您展示修订版rxxx(Sally所做的)与您所做的更改(Harry的更改)之间的变化.通常情况下,这些变化很小,很容易弄清楚要做什么.

  • show diff df:这将显示您的更改(Harry's)与其他修订(Sally's)之间的差异.它基本上显示了diff标记.
  • 编辑 e:您可以在进行合并时编辑合并冲突,而不是等到稍后.
  • 合并 m:不太确定这是做什么的.你现在正在进行合并,所以这没有多大意义.
  • 他们的冲突方面 tc:接受莎莉为解决冲突所做的事情.您可能需要重做您的更改,但至少您正在考虑Sally的更改.
  • 冲突的一面 mc:最危险的情况是因为你完全无视莎莉的变化.莎莉做了一个修复,你可能会解除它.当发布时,Sally的修复不在其中,你将被指责删除更改.那么,你为什么要这样做?因为你已经看过这些变化,并意识到冲突真的不是很大的冲突.这是缩进或类似的变化.或者你调用了一个变量increment,Sally称之为变量counter.

正如我所说,我通常会推迟,让我的更新完成,然后处理问题.

一旦你解决了这个问题,你就可以svn resolved在该文件上做一个让Subversion知道你已经解决冲突的问题.

还有其他选择 - 例如,您可以启动第三方差异/合并工具来处理冲突.

有关更多信息,请查看有关解决合并冲突的Subversion在线手册.


99 *_*one 6

如果您选择该s选项,它将显示:

(e)  edit             - change merged file in an editor
(df) diff-full        - show all changes made to merged file
(r)  resolved         - accept merged version of file

(dc) display-conflict - show all conflicts (ignoring merged version)
(mc) mine-conflict    - accept my version for all conflicts (same)
(tc) theirs-conflict  - accept their version for all conflicts (same)

(mf) mine-full        - accept my version of entire file (even non-conflicts)
(tf) theirs-full      - accept their version of entire file (same)

(p)  postpone         - mark the conflict to be resolved later
(l)  launch           - launch external tool to resolve conflict
(s)  show all         - show this list
Run Code Online (Sandbox Code Playgroud)

使用dc查看冲突分析,那么你可以在最好的选择决定使用