【问题标题】:TortoiseSVN Tree Conflict: can't choose remote fileTortoiseSVN 树冲突:无法选择远程文件
【发布时间】:2017-10-22 10:20:41
【问题描述】:

这是场景:

  • User1,Branch1:添加“abc.def”;提交。
  • User2,Branch2:添加“abc.def”(文件名相同,但文件中有更多详细信息);提交。

现在 User1 想要合并“abc.def”文件的更新版本。因此(使用 TortoiseSVN 1.7.10),User1 从 Branch1 的工作副本开始,选择 Merge... -> Reintegrate a Branch,然后选择 Branch2 并选择 Merge。可以预见的是,会导致“树冲突”,并带有以下文本:

最后一次合并操作尝试从 Branch2 添加文件“abc.def”,但该文件已在本地添加。 你想如何解决这个冲突?

但唯一的选择是标有Keep the local file 的单个按钮。 没有选择远程文件的选项,这是 User1 真正想要的。

我在这里做错了什么,我该如何解决?更具体地说,如何将 User2 的文件版本放入 Branch1?

(当然,我确信 User1 可以在合并之前手动删除文件,但这会抹掉 User1 可能想要保留的任何历史记录。另外,这只是一个笨拙的工作流程,尤其是当这种困境中存在大量文件时.)

不幸的是,TortoiseSVN documentation on Tree Conflicts 中甚至没有提到这种情况

更新:

除了选择“Reintegrate a Branch”之外,我还尝试了“Merge a Range of Revisions”和“Merge two different trees”。对于后一种情况,我选择远程分支(Branch2)作为“开始”,选择本地分支作为目标(Branch1;在添加文件之前选择修订版之前。)我得到了所有情况下的结果相同:树冲突,没有选择文件的 User2 版本的选项。

更新 #2:

根据the documentation,应该有“合并进度对话框中名为Merge non-interactive的复选框”,如果未选中,则应该在合并期间打开“合并冲突回调对话框”。但是,我在合并过程中找不到任何这样的复选框。它在哪里?

【问题讨论】:

  • 您可以选择强制合并吗? (我正在运行 1.9,所以我不确定它是否改变了)另外,当您说 User1 已将文件添加到分支时,您的意思是 SVN 添加/提交还是只是在本地创建?
  • @whrrgarbl:不,我不能强制合并。那就是问题所在。你是说这种情况与 1.9 不同吗?至于您的第二个问题:User1 和 User2 都创建文件并添加/提交。 (更新了我的帖子以澄清。)
  • @whrrgarbl:如果 1.9 确实修复了这个缺陷,并且您可以通过生成的 Merge 对话框的屏幕截图进行演示,我很乐意奖励您。
  • 感谢您的澄清!在 1.9 中,合并对话框包括一个“强制合并”复选框。但不幸的是,它不像我想象的那样在这种情况下工作(不知何故它正在修改文件,但它仍然有 Branch1 版本??)。嗯!

标签: merge tortoisesvn tree-conflict


【解决方案1】:

在 TortoiseSVN 1.9 版中,我可以通过以下过程从一个分支合并到另一个分支。

设置

使用测试存储库,我执行了以下步骤:

  1. 创建一个分支,“first”

  2. 在新分支中创建一个内容为“FIRST”的文件“doc.txt”

  3. 将文件添加并提交到新分支

  4. 创建一个分支,“第二个”

  5. 在该分支中创建一个内容为“SECOND”的文件“doc.txt”

  6. 将文件添加并提交到新分支

所以我的结构看起来像:

branches/
    first/
        doc.txt => "FIRST"
    second/
        doc.txt => "SECOND"

合并

在本例中,我的目标是将second/doc.txt 的内容放入第一个分支。

  1. 右击first分支文件夹,选择TortoiseSVN > Merge...

  2. 选择“合并两棵不同的树”

  3. /branches/first 的URL 填写“发件人”框,用/branches/second 的URL 填写“收件人”框。

    (这是我最初被绊倒的地方 - 我认为情况正好相反!The docs 解释:“这听起来可能不对,但请记住,主干是您要添加分支更改的起点。”)

  4. 如果需要,点击下一步并尝试测试合并。它应该显示“doc.txt”被替换,没有树冲突。对于此示例,默认合并选项很好。

  5. 进行合并并检查first/doc.txt 的内容 - 现在应该显示为“SECOND”。

  6. 运行更新,然后提交 first 文件夹以将合并保存到存储库!

完整日志:

【讨论】:

  • 好吧,恐怕我似乎无法重现您的结果。我已经试过好几次了。第一次我忽略了选择“强制合并”,我遇到了树冲突。第二次我确保选择强制合并,结果是一条消息说它替换了文件——但内容仍然来自第一个分支。
  • 我继续授予你赏金,因为无论如何它即将到期。我今晚没时间做这件事,但明天我会再按照你的指示玩。感谢您的努力!
  • @kmote 嗯,您确定分支名称的顺序正确吗?在我意识到他们是相反的之前,我也发生过这种情况。
  • 天哪,谢谢!如果有帮助的话,我明天会尽力为您截取一些屏幕截图:)
  • @kmote 我刚刚重做了练习并截取了屏幕截图,并进行了一些更正。希望它现在可以工作,抱歉耽搁了!
【解决方案2】:

有一个对话框叫

合并冲突回调对话框

Relating this issue:

应该出现合并冲突回调对话框 - 通过“合并一系列修订”合并多个修订时 - 通过“重新整合分支”合并时

目前合并冲突回调对话框只出现在 第一种情况。

它将包含在即将发布的 1.6.0 版本中。

这允许您选择存储库更改而不是您的

【讨论】:

  • 我已经在使用 v 1.7,所以很遗憾,这个答案(以及您链接到的线程)无法解决我的情况。
【解决方案3】:

Reintegrate a branch vs merge a range of revision

我认为您要做的是先合并一系列修订,然后将分支合并回树中。

【讨论】:

  • 不,我仍然得到相同的结果:树冲突对话框仍然没有提供将本地文件替换为来自另一个分支的远程文件的选项。
猜你喜欢
  • 2017-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-06
  • 2012-09-25
  • 2022-10-14
  • 2012-05-11
  • 1970-01-01
相关资源
最近更新 更多