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

问题描述:

我在一个结构严谨的svn仓库中有一个分支,需要剥离并移动到另一个svn仓库。 (我试图清理一些)。如何将代码库从一个svn回购库迁移到另一个保存历史记录?

如果我做了svn log而不是停止复制/重命名我可以看到我关心的所有3427提交。有什么方法可以将修订转储出来,而不是编写一些主要的脚本?

我会按照this question的建议,但这个分支已经移到了各地,我也想保留这些举措。

+3

我问过类似的问题,'svndumpfilter'总是标准答案。你确定它不会为你削减它吗? – 2010-03-29 19:44:36

+0

那么我可以使用svndumpfilter,但我认为我必须在转储中的点上至少执行9次路径重命名。我只是不知道是否有自动化解决方案。 (回购是太乱了,以使用git-svn)。 – chotchki 2010-03-29 20:13:33

+0

为什么不按原样导入修订版,并在颠覆版中将其重命名?没有必要重写历史记录? – 2010-03-29 20:42:17

我想这可能是类似于@ZacThompson(和@Pekka)的意思是:我觉得svndumpfilter是你的朋友。

从你的问题我认为你有这个想法是什么意思要做,但与复制/移动的分支遍布各地的斗争?给一个答案可在提到SVN Documentation前发现,我相信:

而且,复制的路径可能会给你一些 麻烦。 Subversion支持在存储库中复制 操作,其中 新路径通过复制一些 已存在的路径来创建。有可能 在您的存储库的 生命周期的某个时间点,您可能已将012v文件或目录从svndumpfilter所排除的某个位置 复制到它所包含的位置 。为了使 转储数据自给自足, 过滤流需要仍然显示 添加新的路径,包括由 创建的任何文件的 内容复制并不代表此外 从源的副本将不存在 存在于您的过滤的转储数据 流中。但是因为Subversion 存储库转储格式仅显示每个修订中更改了 ,所以复制源的内容可能不是 。如果您怀疑 你有这种 在你的仓库的任何副本,你可能要 重新考虑你的设定/排除 路径,或许包括担任你 麻烦复制操作的源,太路径 。

含义:使svndumpfilter包括所有路径的分支有史以来的。或者我错过了什么?

另一种可能性可能是@compie在您链接的主题中提到的svndumpfilter2,虽然我相信甚至没有必要(我也不知道@compie或svndumpfilter2)。

+0

我不知道svndumpfilter2,但它似乎是我在找的东西。我会试试看看它是如何工作的。 – chotchki 2010-03-30 13:25:18

+0

我还没有完成我的迁移工作(巨大的回购30k +提交),但这种方法看起来很有希望。 – chotchki 2010-04-14 13:33:54

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

+1

我认为他正在讨论从包含更多内容的回购库中剥离一个非常复杂的结构(内部有多个移动)。 – 2010-03-29 19:54:36

+0

你不能使用hotcopy,这只能用于完整的版本库 – 2010-03-29 20:00:42

你将要使用的某种组合:

  1. svnadmin的转储
  2. 过滤流
  3. svnadmin的负载

如果你想要做的整个分支,你可能甚至不需要过滤流。但是,如果你这样做:

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

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

您可以执行以下步骤:

  1. 配置path-based authorization规则否认读取到路径您想从存储库中删除文件或文件夹的USERNAME帐户访问历史。

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

  2. 创建一个空仓库,

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

不像svndumpfiltersvnsync自动转换svn copy操作与不可读的源路径进入正常添加,如果历史涉及复制操作,仍然需要过滤这是有用的。 :)