如何执行subversion存储库的重大重组

时间:2013-10-18 19:30:23

标签: svn

我为一群人继承了一个subversion存储库的管理,这个组织非常糟糕,目录结构是这样的:

/root
    /branches
        /branch_1_with_cryptic_name
        /branch_2_with_different_cryptic_name
        /branch_3_with_super_cryptic_name
        ...
        /branch_N_with_another_cryptic_name
    /tags
        /tag_1_with_yet_another_cryptic_name
        /tag_2_with_another_different_cryptic_name
        ...
        /tag_M_with_some_other_cryptic_name
    /trunk
        /project_1
        /project_2
        ...
        /project_K

请注意,分支和标签没有按照各自的项目进行组织,因此无法确定哪个分支/标签与哪个项目有关,除非您已经熟悉它。

我想以下列方式重新组织目录结构

/root
    /project_1
        /branches
            /branch_1_with_some_name
            /but_at_least_i_know_which_project
        /tags
            /some_tag_1
            /some_tag_2
        /trunk
    /project_2
        /branches
        /tags
        /trunk
    ...
    /project_K
        /branches
        /tags
        /trunk

此外,我想保留每个文件的历史记录,并允许在每个项目的现有分支和主干之间进行切换/合并。

我正在使用togise SVN,并尝试在repo-browser中简单地移动目录,但只有当我“忽略祖先”并且在每个具有树冲突的文件中合并结果时,切换才有效。

有更好的方法吗?

2 个答案:

答案 0 :(得分:0)

如果您的机器上有完整的回购(主干+分支+标签),您可以使用Tortoise SVN移动它们。这不是很明显(我知道我必须要努力)。

选择文件夹并使用Ctrl-C / Ctrl-X或上下文菜单复制或剪切它们>像往常一样复制/剪切。转到目标文件夹,然后右键单击上下文菜单 - > TortoiseSVN - >粘贴即可。你不敢使用普通的粘贴(但我确定你知道这一点)。

替代方法:选择要移动的文件夹,然后像对任何文件一样移动它们,方法是右键单击。在释放鼠标右键时,在此处选择SVN移动/复制版本化文件。

这应该安全地移动您的文件夹,保留版本历史记录。我认为你可以使用Repo浏览器做同样的事情,但我没有太多使用它。

我希望这适合你!

Source

答案 1 :(得分:0)

如果我是你,我会忘记切换并使用普通的svn movesvn rmsvn mkdir来实现所需的结构。由于这些命令会跟踪所有文件的历史记录,因此您能够合并之前可合并的文件夹。

一种可能的行动方案如下:

  1. 使用project_1
  2. 创建project_2svn mkdir
  3. 在每个项目目录中,创建tagsbranches目录
  4. 将原始项目目录移至trunk/
  5. 中的新位置
  6. 将原始分支移动到project_x/branches/
  7. 中各自的新位置
  8. 将原始代码移至project_x/tags/
  9. 中各自的新位置