55

我有一个我认为很简单的场景 - 使用 TortoiseSVN:

1)我创建了一个应用程序的分支(B2)(用于实现图像精灵和 JAWR)。

2) 测试和开发在主干上正常进行。

3) 在过去的几天里,我通过以下方式重新建立了几次分支:

3.1) 将主干(按修订范围)合并到我的 branch-b2 工作副本,解决合并期间的冲突。

3.2)(在测试了分支-b2之后),我提交了重新建立的分支-b2。

这一切都如我所料。但是将分支合并回主干对我来说很重要:

4) 在分支-b2 中提交所有更新之后;我确保在主干和分支 b2 上进行 SVN 更新。

5)然后,我尝试将分支b2中的(修订范围)合并到主干中。但是,对于任何已添加到主干的新文件,然后在我重新设置它时添加到 branch-b2,我都会遇到树冲突。我不确定解决这些冲突的正确方法是什么。

我见过的最典型的建议是从主干中删除树冲突文件,然后合并分支;或者删除整个主干,将分支文件复制过来,然后将它们作为新版本提交到主干中。这两个选项似乎都不是一个好主意——第一个很痛苦,而且它们似乎都会丢失文件修订历史。

我做错了什么,我该如何解决?

4

6 回答 6

74

听起来您正在使用 1.5 之前的合并样式并尝试将分支重新集成到主干中。在这种情况下,您要做的是首先确保所有主干更改都已合并到分支中,然后不是将分支范围合并到指向主干的工作副本,而是要合并“FROM trunk @HEAD TO branch@HEAD”,工作副本指向主干。在本质上:

“给我所有我需要使主干与分支相同的更改”。

如果您已经将所有主干更改合并到分支,则此方法有效,因为主干和分支之间的唯一区别是在分支中所做的更改。

有道理?:)

于 2009-06-17T18:32:47.127 回答
3

我调查了同样的问题。它是 Tortoise SVN 1.6.5 中的“功能”。TortoiseSVN 1.5 与我们的存储库 (SVN 1.5) 配合得很好。TortoiseSVN 1.6.5 变基时将主线中的文件添加为 NEW(不保存合并历史)。
并且重新集成分支导致将这些文件视为与主线冲突。

我通过使用 TortoiseSVN 1.6“重新集成分支”的特性解决了这个问题。它专门用于功能分支。

——阿列克谢·科尔森

于 2009-10-07T15:33:10.910 回答
2

这里有更多信息可以为@Rytmis 回答做出贡献,这有助于我保持直截了当。

使主干完全像分支或标签的高级步骤:

  1. 从行李箱结帐。
  2. 使用主干的工作副本,从主干合并到分支/标签。
  3. 犯罪。

示例 'svn' 命令行命令:

svn checkout <trunk url>
cd trunk
svn merge <trunk url> <branch/tag url>
svn commit -m "<message>"
于 2014-11-14T16:34:18.867 回答
1

我无法真正弄清楚上述解决方案是如何工作的,所以我的工作方式有所不同。首先,我确保分支包含来自主干的所有更改。

1)我得到了一个新的后备箱副本。2)我使用 tortoise svn export 将分支导出到一个临时位置。3)我使用 Windows 资源管理器将整个分支树复制到主干并覆盖了所有文件 4)我在 tortoise 上使用了检查更改命令并包含所有未修订的文件复选框。5)我选择了所有文件并单击添加。

您应该使用尚未构建的解决方案,以便未修订的文件不包含输出。

我等不及我们升级到 1.5+

于 2009-10-23T18:17:18.000 回答
1

使用 TortoiseSVN 选择“合并一系列版本”选项时选择要合并的版本。这将防止每次合并操作再次出现相同文件的树冲突。

于 2012-07-16T10:05:19.247 回答
0

我想我解决了这个问题。1.右键单击您合并的“分支”。2. 单击 Tortoise SVN >> 合并 3. “合并一系列修订”和下一步 4. !!!检查“反向合并”!!!, URL to Merge from "branch", 具体范围"recently merge revision", and Next 5. Next 6. SVN Commite

之后我可以从分支合并到主干。

于 2017-06-28T06:41:08.383 回答