代码之家  ›  专栏  ›  技术社区  ›  Umar Farooq Khawaja

将文件夹从一个SVN存储库移动到另一个SVN存储库

  •  3
  • Umar Farooq Khawaja  · 技术社区  · 14 年前

    我有一组存储库,其结构类似于:

    /Source
      /branches
      /tags
      /trunk
        /FolderP
        /FolderQ
        /FolderR
    
    /Target
      /branches
      /tags
      /trunk
        /External
          /Library1
          /Library2
          /Library3
        /Internal
          /FolderA
          /FolderB
          /FolderC
          /FolderX
          /FolderY
          /FolderZ
    

    • /Source/trunk/FolderQ变为/Target/trunk/Internal/FolderQ
    • /源/trunk/FolderR变为/Target/trunk/Internal/FolderR

    /Target
      /branches
      /tags
      /trunk
        /External
          /Library1
          /Library2
          /Library3
        /Internal
          /FolderA
          /FolderB
          /FolderC
          /FolderP
          /FolderQ
          /FolderR
          /FolderX
          /FolderY
          /FolderZ
    

    在迁移过程中必须保持历史。

    我在建议的解决方案方面运气不太好。具体来说,我在运行svndumpfilter命令时遇到一个错误,该命令指出:

    svndumpfilter: Invalid copy source path `/branches/name-of-a-branch/.../File.cs`
    

    发生了什么事?我怎样才能避开这个问题?

    • 从/Temp中删除我不需要的文件和文件夹,并签入所有更改
    • 通过调用“svnadmin Dump X:\Repositories\Temp>X:\Dumps\Temp.dmp“
    • 签出/更新/目标存储库
    • 使用TortoiseSVN将文件夹从/Target/trunk/Internal/Temp/trunk/**移到/Target/trunk/Internal(通过在Windows资源管理器中突出显示所需的文件夹,按Control+X,然后将文件夹更改为/Target/trunk/Internal,并使用TortoiseSVN发出粘贴命令)

    注意:以上假设svn正在维护X:\repositories文件夹中的所有存储库,其中一个使用X:\Dumps文件夹作为工作文件夹。

    这将明显打击修订数字,但将保持历史。希望您的提交注释不包含对修订号的引用。

    3 回复  |  直到 7 年前
        1
  •  2
  •   sbi    10 年前

    除非你也想改变历史 FolderP FolderQ ,和 FolderR svn move 让他们 Internal

    请注意 svnadmin load 选择 --parent-dir arg arg 是您希望导入的转储显示在其下的父文件夹。所以呢
    svnadmin load --parent-dir /trunk/Internal dump_of_source_repo target_repo
    /trunk/Internal 在目标回购中。

        2
  •  1
  •   Umar Farooq Khawaja    12 年前

    以下解决方法适用于filipenf所处的特定情况,即Subversion服务器上没有对svnadmin的访问权限。

    如果你能在Subversion服务器上物理地将文件移动到用于存储存储库的文件夹中,那么你算是幸运了。

    1. 停止本地存储库上的本地Subversion服务器,以便刷新存储库并且不能进行任何更改。
    2. 停止公司Subversion服务器。

    然后你可以使用svn:external properties 将此新存储库中的代码引入公司Subversion服务器上的其他存储库。

    请注意,这涉及到 身体上 将文件复制到公司Subversion服务器上,而不是使用Subversion服务器发布的用户界面创建新的存储库或文件夹。

        3
  •  1
  •   Wolf    7 年前

    乌龟内部的巨大支持

    • 打开日志( TortoiseSVN > Show log
    • 选择组成项目的所有修订
    • 右击所选内容,然后 Merge revisions to...
    • 等待TSVN复制您的文件、文件夹和属性。。。
    • 在资源管理器窗口中:提交目标文件夹

    免责声明

    删除历史记录 可能只在某些情况下有效,但我的情况显然就是其中之一(这就是为什么我喜欢TSVN:it) really helps its users

    背景故事:

    在新站点中执行第一次提交。