10

这是场景:

  • 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 文档中甚至没有提到这种情况

更新:

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

更新#2:

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

4

3 回答 3

2

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

设置

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

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

  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 > 合并...

  2. 选择“合并两个不同的树”
    合并对话框

  3. 在“发件人”框中填写 的 URL /branches/first,在“收件人”框中填写 的 URL /branches/second。 (这是我最初被绊倒的地方 - 我认为情况正好相反!文档解释说:“这听起来可能不对,但请记住,主干是您要添加分支更改的起点。”)
    在此处输入图像描述

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

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

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

完整的日志:
存储库日志

于 2017-06-09T02:18:16.210 回答
0

重新集成分支与合并一系列修订

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

于 2017-05-30T10:56:39.903 回答
0

有一个对话框叫

合并冲突回调对话框

在此处输入图像描述

与此问题相关

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

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

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

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

于 2017-06-02T16:02:11.587 回答