我可以在新的父项目下合并两个不同的subversion项目的标签,分支和中继吗?

时间:2012-03-23 19:04:35

标签: svn merge branch

我有一个像这样的存储库:

  • 存储库根目录
    • 项目A1
      • 躯干
        • A1的东西
      • 标记
      • 分支
    • 项目A2
      • 躯干
        • A2东西
      • 标记
      • 分支

我想在单个父目录下合并这两个项目,保留历史记录,标记和分支,同时避免在本地结帐中每个项目下存在trunk / tags / branches子目录。所以新布局看起来像这样:

  • 存储库根目录
    • 项目A-prime
      • 躯干
        • 项目A1
          • A1的东西
        • 项目A2
          • A2东西
      • 标记
      • 分支

这甚至可能吗?我很怀疑,因为标签相对于它们所引用的文件向上移动了一个级别。

我只能使用svn move命令合并中继线(对于分支也是如此):

svn move /A1/trunk /A-prime/trunk/A1
svn move /A2/trunk /A-prime/trunk/A2

但这不会保留标签。似乎我可以手动创建新的标签目录并一次移动每个子项目的标签,但这看起来很难看,我不确定我是否可以轻松移动标签 - Subversion是否给予他们特殊处理不知何故?

2 个答案:

答案 0 :(得分:1)

当我理解你的问题时,你有一个存储库,里面有通常的多项目布局。您现在想要将一个存储库重组为不同的布局。

这当然是可能的。原因很简单:

  • 标签和分支中的所有内容都只是主干的(Subversion)副本。 SVN副本很便宜,因为它只复制元数据。所以例如分支rel1是主干版本4711的副本。此结构永远不会更改,因此您的分支和标记有效。
  • 当您仅使用Subversion命令重构Subversion存储库时,Subversion可确保您不会丢失任何信息。您确定您的项目“A1”的当前内容是什么,并且您知道所有这些的历史。
  • 您不进行真正的合并,只移动存储库中的内容。

唯一可以破解的是当你在某个地方使用svn:externals时,它们会转到当前版本(头部)。您必须更改所有这些定义,因为您的结构已更改。你必须知道该怎么做,如果分支或标签目录中的一些顶级目录(之前是不同的)具有相同的名称,那么没有区别。

您可以使用类似的结构(类似于主干布局):

/tags
  /projectA1
    /rel1
    /rel2
  /projectA2
    /rel1
    /rel2

所以去吧,如果出现问题,只需从您之前完成的转储存储库中重新创建存储库。

答案 1 :(得分:0)

您可以谨慎尝试。一些有用的链接(你忘了做自己的功课)

<强>提示

SVN Book

  

转储格式也可用于合并多个内容   将不同的存储库放入单个存储库中。通过使用   svnadmin load的--parent-dir选项,可以为加载进程指定新的虚拟根目录。这意味着如果您有转储文件   对于三个存储库 - 比如calc-dumpfile,cal-dumpfile和   ss-dumpfile-您可以先创建一个新的存储库来保存它们:

     

然后,在存储库中创建将封装的新目录   以前三个存储库中每个存储库的内容

     

最后,将各个转储文件加载到各自的位置   在新的存储库中

“合并SVN存储库”中的示例

svn-merge-repos.pl -t ./proj ./foo/trunk:proj1 ./bla/trunk:proj2
  

将存储库“foo”和“bla”的“trunk”合并为子目录   存储库“proj”中的“proj1”和“proj2”