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
@4321
是 pin 版本。您是说您对删除 shiny-feature 分支之前的修订版外观感兴趣。 -r4321
表示您正在复制该闪亮分支的修订版。
事实证明,这个错误实际上是由于 TortoiseSVN 预填充了分支的旧路径:
$REPO_URL/project4/branches/shiny-feature
而不是分支的当前路径:
$REPO_URL/project4/project5/branches/shiny_feature
修复此问题后,合并就可以正常工作了。
因此,我们有一个相当复杂的存储库布局,执行移动操作的结果
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
@4321
是 pin 版本。您是说您对删除 shiny-feature 分支之前的修订版外观感兴趣。 -r4321
表示您正在复制该闪亮分支的修订版。
事实证明,这个错误实际上是由于 TortoiseSVN 预填充了分支的旧路径:
$REPO_URL/project4/branches/shiny-feature
而不是分支的当前路径:
$REPO_URL/project4/project5/branches/shiny_feature
修复此问题后,合并就可以正常工作了。