我使用TortoiseSVN在SVN中管理源文件。我添加了文件并将它们提交到修订版,然后决定分支。我使用我需要的文件进行分支,并在不打算使用的文件的主干上执行删除。
现在我正试图将分支重新集成到主干线。 使用乌龟,我已经从主干到分支合并了从后备箱到头部的删除后的修改范围。这使分支机构更新。
现在我切换到主干,并尝试将修订从分支合并到主干,合并表示新文件被“跳过”或删除了我现在已完成的文件。
我是否错过了合并成为最新的行李箱?
答案 0 :(得分:6)
Subversion合并需要一些东西:
你认为这不是一件容易的事,但这种情况发生了很多。我见过使用svn mkdir
创建分支的开发人员,检查该分支,将文件从主干复制到该分支,然后执行svn add
将其添加回来。< / p>
虽然分支和主干具有相同的名称和相同的结构,但Subversion将它们视为两个完全独立的文件。在主干和该分支之间没有共同的历史。当然,开发人员应该使用svn cp
将主干复制到分支。
但是,您可以在较小的块中遇到类似的问题。想象一下,开发人员以正确的方式创建分支。然后发现项目中缺少一些*.jpg
个文件。开发人员检出分支,并添加文件。一切都照顾好了。现在,开发人员意识到同样的bug也在trunk上。没问题,checkout trunk add添加缺少的*.jpg
文件。
当然,主干上的*.jpg
个文件与分支上的文件不同。开发人员应该将从分支创建*.jpgs
的修订版合并到主干。
Subversion没有合并分支:它合并了变化。这是一个难以理解的概念,但它为Subversion提供了很多合并力。
我有一个我在第100版修改后创建的分支。
现在我想将我的分支合并回我的主干。如果我没有指定要使用的修订版,Subversion会尝试找出我需要合并的修订版。我从来没有将我的分支合并到我的主干,所以Subversion看到我的分支和主干之间的最后一个共同祖先是修订版100.然后看到我需要将更改103,110和112合并回我的主干。 / p>
然而,我的分支上的修订版110是我已经合并到我的主干的更改!如果我不小心,我会尝试将这些更改合并到我的主干中,从而导致冲突。
Subversion假设要处理这个问题,但并不总是那么干净。在运行合并之前,请执行以下命令:
$ svn mergeinfo --showrevs eligible $URL/branches/branch
这将显示Subversion想要合并到我的主干的修订版。我应该查看该列表并确保这些更改尚未在我的主干上。
让我们说看看这个列表,并意识到这个符合条件的列表包含修订版103,110和112.等一下。修订版103修复了Bug 2001,但已经在trunk上修复了。出于某种原因,还列出了修订版110,修订版110是我的主干到我的分支的合并。我也不想要考虑这个版本。
我需要做的是告知Subversion不要考虑这些修订:
$ svn merge --record-only -c 103 -c 110 $URL/branches/branch
$ svn commit -m"Updating merge information to prevent collisions with 103 and 110"
现在,我再次运行svn mergeinfo --showrevs eligible
,这两个修订版不会被列出。我基本上已经告知Subverison这两组更改已经在我的主干中了。
在完成合并之前,您始终可以使用--dry-run
来尝试合并。如果指定要合并的修订,则Subversion合并始终有效。当您尝试让Subversion自行跟踪合并时,往往会出现问题。它肯定比以前更好,但Subversion可能会与复杂的情况相混淆。我们有一个项目,重新命名分支,更换主干,并在主干和其他两个分支之间进行合并。 (不要问为什么。)。
开发人员无法进行合并,因为他们最终发生了几百次冲突。看看符合条件的修订,我能够清理混乱,并使合并工作。
请记住尽早合并:经常合并,合并的可能性越大,任何冲突都很容易找到。尽量保持合并活动简单。如果您修复了两个不同分支上的错误,则需要通过svn merge --record-only
知道Subversion。
无论你做什么。别恐慌。冲突将会发生,如果您了解如何解决冲突,您可以避免合并地狱。
答案 1 :(得分:0)
为了重新整合,您需要合并{<1}}之后发生 之后的所有修订,这些修订分支到您要重新整合的分支。
以下是一个例子:
您会注意到,我们已将删除您的文件( Rev 22 )作为合并到功能分支( Rev 25 )的一部分。
在 Rev 25 期间合并来自Trunk
的更改时,您的Feature Branch
所希望的文件将被删除。关于Trunk
中实际发生的事情,这是真实准确的。您将在这里有几个选项:
Trunk
中删除的文件在版本24 期间在Trunk
中被修改,则在尝试按进行合并时,您会收到树冲突第25版。您可以在执行合并时使用本地更改将冲突标记为已解决。Feature Branch
,然后执行Feature Branch
所需的任何其他合并(这应该等同于我在#中提到的内容) 1)Feature Branch
。合并完成后,您可以查看Feature Branch
的日志并还原在 Rev 25 (合并本身)中所做的更改,这些更改会删除您的文件,方法是选择文件并还原每个文件。这些撤消将把文件恢复为要添加到Feature Branch
存储库的新文件。 请注意,这些文件在历史记录中与原始文件不同。就SVN而言,这些被视为全新的文件,因此它们不会与原始对手共享任何血统。