颠覆鸡和鸡蛋的问题

时间:2010-09-21 17:25:56

标签: svn merge

我有一个包含主干和一个分支的SVN(1.6.12)项目。我试图了解合并是如何工作的。

project
+ trunk (14)
+ branches
  + test-branch (14)

括号中的数字是修订号。我使用命令“cd branches/test-branch; svn merge svn+ssh://.../trunk”执行从主干到测试分支的合并 并使用“svn commit -m 'Merged trunk'”提交更改。我的目录结构现在如下所示:

project
+ trunk (14)
+ branches
  + test-branch (15)

然后我尝试在trunk和test-branch之间进行重新集成合并:“cd trunk; svn merge --reintegrate svn+ssh://.../branches/test-branch”。 SVN抱怨主干需要修订版本15.我做了“svn update”,目录结构如下:

project
+ trunk (15)
+ branches
  + test-branch (15)

酷!准备重新融入。我再次尝试“svn merge --reintegrate svn+ssh://.../branches/test-branch”。现在SVN抱怨我需要在重新集成之前将所有主干更改合并到分支中。主干位于15,但测试分支仅合并到14。

我该如何解决这个问题?如果我合并到分支然后提交,分支将在16。我尝试在主干上使用“svn switch”,但我得到相同的错误。

存储库位于14的原因是因为我在主干和测试分支合并之间保持锯切。精神错乱的一个定义是重复相同的过程并期待不同的结果: - )。

感谢。

1 个答案:

答案 0 :(得分:3)

听起来你在分支和标签上面有一个结账,现在你应该如何工作。

要解决此问题,请确保您只有一个正常行李的工作副本:

svn co <server>/svn/repos/trunk

如果你想从中创建一个分支,你应该制作服务器端副本(否则它会将你的工作副本复制到该分支,你不希望这样):

svn copy <server>/svn/repos/trunk <server>/svn/repos/branches/test-branch

现在您可以切换工作副本以在分支上执行某些操作:

svn switch <server>/svn/repos/branches/test-branch

您现在可以将更改从分支合并到主干,或重新集成分支。重新集成后,您应该删除分支(该命令应该执行一次,在分支的末尾,有关详细信息,请参阅svnbook

要执行此操作,请先切换回主干:

svn switch <server>/svn/repos/trunk

然后合并修订版:

svn merge -c <revnumber> ^/branches/test-branch

或重新整合分支:

svn merge --reintegrate ^/branches/test-branch
svn delete <repos>/svn/repos/branches/test-branch -m "Delete branch"