我原来的问题如下。从那以后我尝试了一些事情,看看我是否可以让它工作。
我有一个看起来像这样的小 shell 脚本:
svnadmin dump -r108917 ./repo \
| svndumpfilter include /KeyManagement \
--drop-empty-revs \
--skip-missing-merge-sources \
--renumber-revs > km.svndump \
while read rev
do
svnadmin dump -r$rev --incremental ./repo \
| svndumpfilter include /KeyManagement \
--drop-empty-revs \
--skip-missing-merge-sources \
--renumber-revs >> km.svndump
done << km.revs.txt
km.revs.txt
是一个文本文件,仅包含包含/KeyManagment
项目更改的修订。
当我第一次这样做时,我以为我会在之后进行过滤。然而,在转储的第一个修订版km.svndump
中,大小增长到超过 68 GB。哎呀。在第二次尝试中,我通过svndumpfilter
.
这运行了很长一段时间(我nohup
会这样做并不时检查它)。完成后,我得到km.svndump
了显示 UUID、第一个修订版和内存不足错误的信息。显然,我的脚本没有通过要转储的第一个修订版。
任何想法如何继续?
我们有一个存储库,其中包含一个与存储库的其余部分完全不兼容的特殊项目。LDAP 组中的任何用户都可以看到整个存储库Development
。但是,一个项目包含我们只希望从事该项目的人看到的信息。(我们的密钥管理项目)。回购布局如下所示:
/trunk
- 其余部分的主干/branches
- 回购其余部分的分支/tags
- 回购其余部分的标签/KeyManagement
- 特殊的密钥管理项目。
为了防止窥探,我们使用 svn_acces 文件来指定可以看到此内容的用户。这在维护中引起了很多问题,我只想创建KeyManagement
一个具有自己的 LDAP 访问组的单独存储库。(我们已经有多个具有自己的 LDAP 组的存储库)。
问题是我们的 repo 中有超过 175,000 个修订,其中只有 124 个修订与 KeyManagement 项目有关。转出所有 175,000 个修订版大约需要 30 多个小时。如果我可以直接转储我需要的修订,我可以在几个小时内完成整个转储。
另一个问题是这样的:
$ svn log -r108917:108918 -v $REPO
------------------------------------------------------------------------
r108917 | svnadmin | 2011-03-23 00:46:04 -0500 (Wed, 23 Mar 2011) | 1 line
Changed paths:
A /KeyManagement
New folder KeyManagement
------------------------------------------------------------------------
r108918 | svnadmin | 2011-03-23 00:47:18 -0500 (Wed, 23 Mar 2011) | 1 line
Changed paths:
A /KeyManagement/trunk (from /trunk/KeyManagement:108917)
D /trunk/KeyManagement
Move the KeyManagement
------------------------------------------------------------------------
显然,KeyManagement
曾经也下过/trunk
。我以前使用转储和加载的经验svndumpfilter
是我必须同时转储和/KeyManagement
加载/trunk/KeyMangement
。老实说,我不在乎,/trunk/KeyManagement
因为应用程序完全重做,没有人关心代码。
我了解转储的第一个修订版是完整的修订版。我可以做这样的事情吗:
$ svnadmin dump -r108917:108918 old_repo > dump_file
$ svnadmin dump -r108103 --incremental old_repo >> dump_file #Revision with KeyManagement
$ svnadmin dump -r107429 --incremental old_repo >> dump_file #Revision with KeyManagement
...
$ svnadmin load --parent-dir new_repo < dump_file
只需转储与 KeyManagement 相关的修订。我不在乎/trunk
. 从那时起,该项目已经完全修改。我知道修订版,我可以很容易地编写一个 shell 脚本来做到这一点。与 KeyManagement 相关的修订没有任何其他项目与之纠缠。
我只是不想花 40 多个小时来做这件事。