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

时间:2015-01-19 23:55:46

标签: 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

5 - 要解决此问题,哈里将使用svn update更新本地副本。

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

lottery harry$ svn update
G lottery.c
Updated to revision 2.

但是,我的输出是:

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:

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

3 个答案:

答案 0 :(得分:39)

如果您有多个人同时更改同一个文件,则两者都可能更改相同的行。这就是发生在你身上的事。莎莉改变了哈利改变的方式。当Harry做svn update时,Subversion检测到了这一点,并且问你要做什么。

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

怎么办? Subversion给你一些选择。

  • 推迟 p :这就是我通常对此类情况所做的事情。 Subversion将嵌入文件中的 diff markers 文件:

<<<<<<< .mine
foobar
=======
fubar
>>>>>>> .rxxx

这向您展示了修订版rxxx(Sally所做的)与您所做的更改(Harry的更改)之间的变化。通常,这些变化很小,很容易弄明白该做什么。

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

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

解决问题后,您对该文件执行了svn resolved,让Subversion知道您已修复冲突。

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

有关详细信息,请查看有关resolving merge conflicts

的Subversion在线手册

答案 1 :(得分:6)

如果您选择override func viewDidLoad() { super.viewDidLoad() if scoreAdd == scoreAdd1 { time.text = "\(regulargame)" }else { overtime = regulargame + 30 time.text = "\(overtime)" } // Do any additional setup after loading the view, typically from a nib. } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } @IBAction func btn1(_ sender: AnyObject) { scoreAdd += 1 score1.text = "\(scoreAdd)" } @IBAction func btn2(_ sender: AnyObject) { scoreAdd1 += 1 score2.text = "\(scoreAdd1)" } 选项,它会显示:

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 查看confilicts然后您可以决定使用

的最佳选项

答案 2 :(得分:1)

&#34; G&#34;表示该文件已由其他人修改,但该人所做的修改位于文件的不同部分,因此SVN可以为您合并而无需寻求帮助。

&#34; C&#34;表示该文件不仅被其他人修改,而且他们的更改也与您更改的行相同,因此SVN不知道该怎么做。现在你的工作是合并。

你可能没有做错任何事情,这本书没有错,他们只是忽略了具体变化的细节,显然。