SVN:合并已在存储库中移动的分支

SVN: merging a branch which has moved in the repository

因此,我们有一个相当复杂的存储库布局,执行移动操作的结果 :

svn.contoso.com/root_repository_path/
    |- 项目1
    |- 项目2
    | |- 子项目A
    | |- 子项目B
    |- 项目3
    |- 项目4
    |- |- 子项目A
    |- |- 子项目B
    | |- project5(我正在进行的项目)

这些文件夹中的每一个都有一个完整的 trunk/branches/tags 结构,project5 特别有几个分支,所有这些分支都可以追溯到 之前 来自链接的开发人员问题重组了存储库。现在,我需要将一个分支(我们称之为 shiny-feature 分支)合并回另一个 'parent' 分支;事情是,当我尝试将 shiny-feature 分支的完整修订范围合并到父分支时,(Tortoise)SVN 变得困惑,给我一个形式的错误:

找不到“/svn/root_repository_path/!svn/bc/5555/project5/branches/shiny-feature”路径

其中 5555 是存储库所在的当前修订版。尝试仅合并移动分支的修订会产生无操作合并,而排除分支移动修订会产生与上述完全相同的错误。

我应该如何将这个分支合并回来?

首先,该分支在树的其他地方是否可见?如果我没理解错的话,project5 已经从存储库树的根目录移到了 project4 下面,它的分支去了哪里?

Subversion 在合并分支本身时通常不会有太多合并问题,因为它可以很容易地从旧位置沿着树向下走到新位置。如果 `project5 下还有它的分支,这应该没问题:

$ svn co $RSVP_URL/project4/project5/trunk project5-trunk
$ cd project5-trunk
$ svn merge $RSVP_URL/project4/project5/branches/shiny-feature

如果该分支在您最近的树版本中不再可见,您必须通过 svn cp:

恢复它
$ svn cp -r4321 $REPO_URL/project5/branches/shiny-feature@4321 \
    $REPO_URL/project4/branches/shiny-feature

@4321pin 版本。您是说您对删除 shiny-feature 分支之前的修订版外观感兴趣。 -r4321 表示您正在复制该闪亮分支的修订版。

事实证明,这个错误实际上是由于 TortoiseSVN 预填充了分支的旧路径:

$REPO_URL/project4/branches/shiny-feature

而不是分支的当前路径:

$REPO_URL/project4/project5/branches/shiny_feature

修复此问题后,合并就可以正常工作了。