如何将代码库从一个svn repo迁移到另一个保存历史记录?

时间:2010-03-29 19:32:08

标签: svn svnadmin svnsync svndumpfilter

我在一个结构严重的svn repo中有一个分支,需要被剥离并移动到另一个svn存储库。 (我正试图清理它)。

如果我执行svn log而不是停止复制/重命名,我可以看到我关心的所有3427次提交。除了编写一些主要的脚本之外,有没有办法将修订版转出?

我会遵循this question中的建议,但这个分支已被移动到所有地方,我也想保留这些动作。

4 个答案:

答案 0 :(得分:2)

我想这可能与@ZacThompson(和@Pekka)的意思相似:我认为svndumpfilter是你的朋友。

根据你的问题,我认为你已经知道它的意图是什么,但却在整个地方复制/移动分支机构?我可以在前面提到的SVN Documentation中找到答案:

  

此外,复制的路径可以给你一些   麻烦。 Subversion支持复制   存储库中的操作,其中a   通过复制一些来创建新路径   已存在的路径。有可能的   在生命的某个阶段   您的存储库,您可能已复制   某个位置的文件或目录   那个svndumpfilter被排除在外   它包含的位置。要做   转储数据自给自足,   svndumpfilter还需要显示   添加新路径 - 包括   由...创建的任何文件的内容   复制 - 并不代表该添加   作为来自不会的来源的副本   存在于过滤的转储数据中   流。但是因为Subversion   存储库转储格式仅显示内容   在每次修订中都改变了   复制源的内容可能不会   随时可用。如果你怀疑   你有这种副本   在您的存储库中,您可能想要   重新考虑你的被包含/被排除的一组   路径,可能包括路径   作为你的来源   麻烦的复制操作也是如此。

含义:make svndumpfilter包含分支所在的所有路径。或者我错过了什么?

另一种可能性是@compie在您链接的主题中提到的svndumpfilter2虽然我认为它甚至没有必要(我不知道@compie或svndumpfilter2)。< / p>

答案 1 :(得分:1)

您需要使用以下组合:

  1. svnadmin dump
  2. 过滤流
  3. svnadmin load
  4. 如果你想做整个分支,你可能甚至不需要svndumpfilter。但如果你这样做:

    http://svnbook.red-bean.com/nightly/en/svn.reposadmin.maint.html#svn.reposadmin.maint.filtering

答案 2 :(得分:0)

还有另一个非常简单的解决方案,可以解决“保留动作”问题。请参阅Apache Subversion FAQ条目"How do I completely remove a file from the repository's history?"的最后一段。该解决方案不依赖于svndumpfilter

您可以执行以下步骤:

  1. path-based authorization规则配置为拒绝 USERNAME 帐户对该文件的 PATHS 的读取权限要从存储库历史记录中删除的文件夹。

    请注意复数名词路径。您要删除的文件或文件夹可以具有不同的名称,也可以位于存储库历史记录的不同位置。设置拒绝规则时请考虑这一点。

  2. 创建一个空存储库,

  3. 使用svnsync工具将源存储库复制到帐户 USERNAME 下的目标存储库。有关与svnsync存储库同步的详细信息,请参阅SVNBook章节"Repository Replication"

  4. svndumpfilter不同,svnsync会自动将svn copy操作与不可读的源路径转换为正常添加,如果历史记录涉及复制操作且仍需要过滤,则此操作非常有用。 :)

答案 3 :(得分:-2)

您需要使用HotCopy备份存储库目录。那么它应该只是简单地恢复存储库。