首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SVN:最小化将项目移动到自己的回购中所需的转储

SVN:最小化将项目移动到自己的回购中所需的转储
EN

Stack Overflow用户
提问于 2014-08-27 22:00:44
回答 1查看 966关注 0票数 4

我最初的问题如下。从那以后,我试了几件事,想看看我能不能让这件事奏效。

我有一个很小的shell脚本,如下所示:

代码语言:javascript
复制
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增长到了超过68G的大小。哇哦。在第二次尝试中,我通过svndumpfilter过滤项目。

这个程序运行了很长一段时间(我只是时不时地检查一下nohup)。当我完成时,我得到了显示UUID、第一次修订和内存不足错误的km.svndump。显然,我的脚本没有通过要转储的第一个修订版。

有什么办法继续吗?

我们有一个包含一个特殊项目的存储库,它实际上与存储库的其他部分不兼容。LDAP组Development中的任何用户都可以看到整个存储库。然而,一个项目包含的信息,我们只希望在该项目的工作人员看到。(我们的KeyManagement项目)回购的布局如下所示:

  • /trunk -用于回购的其余部分
  • /branches -其他回购的分支
  • /tags -其他回购产品的标签
  • /KeyManagement -特别KeyManagement项目。

为了避免窥探,我们使用一个svn_acces文件来指定可以看到这一点的用户。这在维护方面造成了很多问题,我只想让KeyManagement成为一个单独的存储库,并拥有它自己的LDAP访问组。(我们已经有了自己的LDAP组的多个repos )。

问题是,我们在回购中有超过175,000次修订,其中只有124次与KeyManagement项目有关。把所有175,000次修改都抛出大约需要花费30+时间。如果我能扔掉我需要的修改,我可以在几个小时内完成整个转储。

另一个问题是:

代码语言:javascript
复制
$ 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,因为应用程序已经完全被重做了,没有人关心代码。

据我所知,转储的第一次修订是一个完整的修订。我能做这样的事吗?

代码语言:javascript
复制
$ 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+时间来做这件事。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-11 17:18:25

我终于用了svnrdump。我不得不转储所有的修订,但它允许我指定我只需要/KeyManagement。使用svndumpsvndumpfilter,我必须指定/KeyManagement /trunk/KeyManagment,因为这是原始项目所在的位置。

不幸的是,您不能在svndumpfilter上使用svnrdump,而且由于报告了所有的修订,所以我无法对它们重新编号并删除空的。

尽管如此,svnrdump仍然允许我只捕获一个目录,即使我不能更改它的位置,也不能跳过空的修订并重新编号。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25537659

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档