乌龟SVN:使用“theirs”解决冲突。这是什么意思?

78

请问有人能解释一下Tortoise SVN在冲突文件上的以下两个选项之间的区别:

  • 使用“theirs”解决冲突。
  • 使用“mine”解决冲突。

另外,为什么没有人将这种混淆术语的使用报告为错误呢?


4
可能的混淆是因为没有理解“他们的”和“我的”的上下文含义。 - Igor Pashchuk
18
我来到这里是因为困惑,虽然不是在Tortoise SVN中,而是通过命令行。当在命令行上进行更新时,选项会给出"theirs-conflict",但这个术语含糊不清,无法确定选择它是否会使冲突状态得到保留或解决。 - pohl
3
当你在合并时,术语切换为“本地”和“仓库”,这会使事情更加混乱。在这种情况下,哪个是哪个并不十分清晰。 - JohnOpincar
7
我一再地回到这个页面。为什么他们不直接说“优先选择本地更改而非存储库的更改”,以及“优先选择存储库更改而非本地的更改”,或者类似的逻辑简单易懂的表述呢?我知道这样可能会更长一些,但在这种情况下,“少即是多”绝对行不通。 - Component 10
3
确实有歧义。查看别人的分支,然后将你自己创建的分支的更改合并到它里面。看看你的和我的区别有多明显。 - Programming Guy
显示剩余2条评论
6个回答

57

使用“theirs”解决冲突意味着当您尝试签入具有冲突编辑的两个文件时,SVN将放弃您的更改并使用其他人的更改。

使用“mine”解决冲突意味着您会放弃他们的更改,而使用您文件的版本。


4
请查看这张图片,它详细解释了这个问题:http://tortoisesvn.net/docs/release/TortoiseMerge_zh_CN/tmerge-basics-conflicts.html - Stefan
3
这个答案并没有解决关于“theirs vs mine”的歧义问题。我只是被要求将我所在的分支上的更改合并到另一个人所在的分支上。在这种情况下,我认为“我的”更改是来自我的分支的那些更改。但是,如果我接受“我的”更改,实际上会丢弃我的分支中的更改。 - Programming Guy
我在菜单中没有看到“使用mine解决冲突”的选项。难道没有确保我的更改与他们的更改合并的方法吗? - SearchForKnowledge
1
是的,我不理解这个答案。没有“其他人”。 - braks

42

我想添加整个列表以供进一步参考:

(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

34

我同意。

在我看来,如果这样说会更清晰:

  • 使用代码库中的版本解决(theirs)
  • 使用本地工作副本中的版本解决(mine)

3
我认为最好的答案是冲突可能发生在没有第二人参与的情况下(例如,在使用多个分支的git flow时)。 - Christoph
现在,“标记为已解决”是什么作用?它使用我的还是他们的?! - F.I.V
2
它只是移除了冲突标记并使用合并文件的当前状态。通常,您会查看冲突并纠正任何问题,然后将其标记为已解决。本问题讨论的两个选项是通过仅使用您的版本或存储库中的版本来解决冲突的快捷选项。这样做会自动将其设置为已解决,而当您手动纠正冲突时,您必须“标记为已解决”。 - james2code

7
SVN命令行合并在将分支合并回主干时会很困惑。 “我的更改”是我在分支中进行的更改,但这是错误的,根据SVN的说法。让事情变得更加复杂的是,SVN在命令行帮助中将路径称为SOURCE、TARGET和HEAD。
以下是简单的答案,如果您从目录C:\Project1\Trunk运行此合并语句。
svn merge -r 60:68 C:\Project1\branches\UpdatesToProject1

“Mine”是SVN正在运行的目录(C:\ Project1 \ Trunk)。

“Theirs”是您正在合并并在命令行上指定的目录(C:\ Project1 \ branches \ UpdatesToProject1)

如果SVN提供了MINE和THEIRS所引用的路径,那将非常好。


2
这个答案应该更高。我们使用分支和主干,这让人感到非常困惑。 - iank

6
BuzzAnn是正确的。mine vs theirs是不明确的,因为存储库中的内容也可能是我的。明确的区别是存储库与本地副本。

1
如果您认可代码库中的内容不再(仅)属于您,而是与所有拥有权限的用户共享,那么这可能更加清晰。在这个背景下,“theirs”指代代码库中团队共享的代码,“mine”指代您的工作副本(可能在本地机器上)。因此,“using theirs”会用共享的副本替换您的工作副本,并且丢弃本地机器上存在的更改。“using mine”意味着决定将工作副本中的代码保留在代码库中,放弃当前代码库中的内容。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接