将 svn 文件夹移动到自己的存储库

Posted

技术标签:

【中文标题】将 svn 文件夹移动到自己的存储库【英文标题】:Moving svn folders to own repository 【发布时间】:2012-05-07 12:01:56 【问题描述】:

我有一个一直在扩展和扩展的存储库。现在我正在清理它并希望将每个项目移动到单独的存储库。我目前的设置:

[ProjectRepo]
- Projects
  - Software1
    - trunk (VS2010 solution inside here)
      - .sln
      - vs project #1
      - vs project #2
      - vs project #3      
    - branches
    - tags
  - Software2
    - trunk (VS2010 solution inside here)
      - .sln
      - vs project #1
      - vs project #2
      - vs project #3      
    - branches
    - tags
  - Shared
    - shared component #1 (vs project)
      - trunk
      - branches
      - tags
    - shared component #2 (vs project)
      - trunk
      - branches
      - tags

现在我想将每个项目和每个解决方案移动到主干目录中自己的存储库。我一直在尝试使用 svnadmin dump 和 svndumpfilter,但问题是节点路径仍然像旧结构一样。如何获得以下结构?

[Software #1 Repo]
- trunk
- branches
- tags

[Software #2 Repo]
- trunk
- branches
- tags

[Shared Component #1 Repo]
- trunk
- branches
- tags

【问题讨论】:

将项目移动到不同的仓库有什么好处?通常将所有代码放在一个仓库中会更方便。 我们在软件的几个部分之间共享组件。在我看来,在单独的存储库中将某个标签绑定到修订版更容易......或者你对此有不同的看法? 查看 svn:external 属性,了解如何处理共享组件的依赖关系:svnbook.red-bean.com/en/1.7/svn.advanced.externals.html 我们目前正在使用 svn:externals,但是当您标记使用与组件相关的修订而不是整个存储库的总体修订号时,不是更容易/更好吗? 根据我的经验,这只是习惯问题。此外,维护多个存储库会增加用户管理(需要管理更多访问权限和密码文件)、备份策略的复杂性,并且难以在软件 2 中重用软件 1 的一部分,以防这种情况发生。 【参考方案1】:

如果您能够使用 svndumpfilter 成功过滤项目(如果项目之间存在任何“交互”,例如复制或合并,我认为这是不可能的),那么您可以使用旧结构创建新的存储库,然后通过 svn copy 和 svn delete 创建新结构(即复制 Software1Repo/Projects/Software1/trunk 到 Software1Repo/trunk,然后 svn delete 等)。

【讨论】:

以上是关于将 svn 文件夹移动到自己的存储库的主要内容,如果未能解决你的问题,请参考以下文章

将 SVN 存储库的一部分镜像到工作副本

SVN 加载新存储库

移动了存储库。我是否使用SVN交换机,SVN重定位或其他所有内容

将 SVN 存储库复制到另一个服务器存储库的子文件夹中,并带有历史记录

列出不同用户在他们自己的位置创建的所有 SVN 存储库

将存储库移动到svn中的另一个子目录[重复]