Svn 我可以将两个不同subversion项目的标记、分支和主干合并到一个新的父项目下吗?

Svn 我可以将两个不同subversion项目的标记、分支和主干合并到一个新的父项目下吗?,svn,merge,branch,Svn,Merge,Branch,我有这样一个存储库: 存储库根 项目A1 树干 A1材料 标签 分支机构 项目A2 树干 A2材料 标签 分支机构 我希望将这两个项目合并到一个父目录下,保留历史记录、标记和分支,同时避免在本地签出中每个项目下出现trunk/tags/branchs子目录。因此,新布局将如下所示: 存储库根 A-prime项目 树干 项目A1 A1材料 项目A2 A2材料 标签 分支机构 这可能吗?我很怀疑,因为标记相对于它们引用的文件向上移动了一个级别 我可以仅

我有这样一个存储库:

  • 存储库根
    • 项目A1
      • 树干
        • A1材料
      • 标签
      • 分支机构
    • 项目A2
      • 树干
        • A2材料
      • 标签
      • 分支机构
我希望将这两个项目合并到一个父目录下,保留历史记录、标记和分支,同时避免在本地签出中每个项目下出现trunk/tags/branchs子目录。因此,新布局将如下所示:

  • 存储库根
    • A-prime项目
      • 树干
        • 项目A1
          • A1材料
        • 项目A2
          • A2材料
      • 标签
      • 分支机构
这可能吗?我很怀疑,因为标记相对于它们引用的文件向上移动了一个级别

我可以仅使用
svn move
命令合并主干(分支也是如此):


但这不会保留标签。我似乎可以手动创建新的标记目录,并将每个子项目的标记一次移动一个,但这似乎很难看,而且我不确定我是否可以如此轻松地移动标记-Subversion是否以某种方式对它们进行了特殊处理?

您可以谨慎地尝试。一些对你有用的链接(你忘了做自己的家庭作业)

提示

SVN手册

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

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

svn-merge-repos.pl -t ./proj ./foo/trunk:proj1 ./bla/trunk:proj2
最后,将各个转储文件加载到各自的位置 在新存储库中

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

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


您可以谨慎地尝试。一些对你有用的链接(你忘了做自己的家庭作业)

提示

SVN手册

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

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

svn-merge-repos.pl -t ./proj ./foo/trunk:proj1 ./bla/trunk:proj2
最后,将各个转储文件加载到各自的位置 在新存储库中

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

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


当我正确理解您的问题时,您有一个存储库,其中包含通常的多项目布局。现在,您需要将该存储库重新构造为不同的布局

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

  • 标记和分支中的所有内容都只是主干的(Subversion)副本。SVN副本很便宜,因为它只复制元数据。例如,分支rel1是主干4711版本的副本。此结构永远不会更改,因此您的分支和标记是有效的
  • 当您仅使用subversion命令重新构造subversion存储库时,subversion确保您不会丢失任何信息。您肯定知道项目“A1”的当前内容,并且您知道所有这些内容的历史
  • 您不进行真正的合并,只在存储库中移动内容
唯一可能出现问题的是,当您在某处使用
svn:externals
时,这些内容会转到当前版本(head)。您必须更改所有这些定义,因为您的结构已更改。如果分支或标记目录中的一些顶级目录(以前是不同的)具有相同的名称,那么您必须知道该怎么做,因此没有区别

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


所以去做吧,如果出了什么问题,就从你之前做过的转储存储库中重新创建你的存储库。

当我正确理解你的问题时,你有一个存储库,其中包含通常的多项目布局。现在,您需要将该存储库重新构造为不同的布局

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

  • 标记和分支中的所有内容都只是主干的(Subversion)副本。SVN副本很便宜,因为它只复制元数据。例如,分支rel1是主干4711版本的副本。此结构永远不会更改,因此您的分支和标记是有效的
  • 当您仅使用subversion命令重新构造subversion存储库时,subversion确保您不会丢失任何信息。您肯定知道项目“A1”的当前内容,并且您知道所有这些内容的历史
  • 您不进行真正的合并,只在存储库中移动内容
唯一可能发生故障的是,当您在某处使用
svn:externals
时,这些会转到当前位置
/tags
  /projectA1
    /rel1
    /rel2
  /projectA2
    /rel1
    /rel2