0

我们在特定物理位置有多个 SVN 存储库/mnt/data1/repos

并且回购的结构如下

repos
     |
     App1
         |
         trunk
              |
              module1
              |
              module2
         |
         branches
     |
     App2
         |
         trunk
              |
              module1
              |
              module2
         |
         branches
     |
     App3
         |
         trunk
              |
              module1
              |
              module2
         |
         branches

我们正在尝试将多个存储库合并到单个存储库,如下所示在不同的路径/mnt/data2/repo

     repo
     |
     trunk
         |
         App1
            |
            module1
            |
            module2
         |
         App2
            |
            module1
            |
            module2
         |
         App3
            |
            module1
            |
            module2

我使用 svnadmin 创建了一个仓库/mnt/data2/repo

创建目录/mnt/data2/repo/trunk/App1/mnt/data2/repo/trunk/App2/mnt/data2/repo/trunk/App3使用svn mkdir.

然后我尝试做svn dumpapp1 ,使用with和 did to/mnt/data1/repos/App1/过滤它。它失败了,因为它不是回购的根。svndumpfilterinclude trunksvn import/mnt/data2/repo/trunk/App1/mnt/data2/repo/trunk/App1

请让我知道执行此合并的最佳方式。重要的一点是我们应该保留所有回购的修订历史。

编辑:

我执行了以下步骤。

svnadmin dump --quiet /mnt/data1/repos/App1 > App1.dmp
svndumpfilter include --targets /tmp/list.txt < App1.dmp > App1Trunk.dmp
svnadmin create /mnt/data2/repo/
svn mkdir --parents svn://<IP>:<PORT>/trunk/App1 -m "Creating MC directory"
svnadmin load  --quiet --parent-dir trunk/App1 /mnt/data2/repo < App1Trunk.dmp

当我尝试加载转储时,我发现它仍在创建trunk/App1/trunk/module1,trunk/App1/trunk/module2等。帮助我将数据加载到trunk/App1/moudle*.

4

1 回答 1

1

最简单的方法是使用svn mv来移动东西:

$ svn mv --parents $URL/repos/App1/trunk/module1 $URL/repos/trunk/App1/module1

这会将您的存储库移至新结构,并且您仍将拥有您的历史记录。在移动整个项目时,您必须与存储库的用户进行协调。确保用户知道发生了什么。事实上,协调通常是这些举措的最大问题。

的问题是svnadmin dumpsvnadmin load你可以移动的东西是有限的。即使您将旧项目的目录结构移动到新节点,也会保留它们。由于 Subversion 存储库是一个巨大的项目,并且您可以正式提交涉及多个分支、主干和项目的更改,因此 Subversion 坚持保持其结构。您也许可以将某些内容移动到新的根节点,但除此之外您无法真正编辑结构。

于 2014-01-22T17:34:38.803 回答