我正在尝试拆分包含多个项目的旧SVN存储库。
我试图转储整个存储库,对其进行过滤,然后加载到新的存储库中,但是由于先前的副本和重命名,svndumpfilter以无效的复制源路径错误结尾,除非我包含更多文件夹:

svnadmin dump OldRepository > OldRepository.dump
svndumpfilter include --drop-empty-revs --renumber-revs "/UnwantedFolder1" "/UnwantedFolder2" "/WantedFolder" < OldRepository.dump > WantedRepository.dump

作为解决方法,我在svnadmin dump中使用了exclude:
svnadmin dump OldRepository --exclude "/UnwantedFolder1" --exclude "/UnwantedFolder2" --exclude "/EvenMoreUnwantedFolders" > WantedRepository.dump

我可以将此转储加载到新的存储库中,唯一的问题是它充满了空的修订版本。我尝试使用svndumpfilter消除它们,但是从输出来看,它似乎保留了所有这些修订(并将它们重新编号为原始编号)。
svndumpfilter --drop-empty-revs --renumber-revs include "/" < WantedRepository.dump > FilteredWantedRepository.dump

另一个奇怪的事情是,即使我没有进行开关过滤,将结果转储加载到新存储库中也会导致错误:
svndumpfilter include "/" < WantedRepository.dump > NotReallyFilteredWantedRepository.dump
svnadmin create NotReallyFilteredWantedRepository
svnadmin load NotReallyFilteredWantedRepository < NotReallyFilteredWantedRepository.dump

svnadmin: E140001: Dumpstream data appears to be malformed

我发现这两个转储文件之间的唯一区别是在WantedRepository.dump中
Revision-number: 1
Prop-content-length: 10
Content-length: 10

PROPS-END

Revision-number: 2
Prop-content-length: 10
Content-length: 10

PROPS-END

在NotReallyFilteredWantedRepository.dump中时,缺少PROPS-END行。
Revision-number: 1
Prop-content-length: 10
Content-length: 10


Revision-number: 2
Prop-content-length: 10
Content-length: 10

svndumpfilter的输出有什么问题?
如何删除空白修订版?

最佳答案

我进行了一些测试,由于没有svnadmin dump与svndumpfilter相同的选项,因此似乎没有简便的方法。在有关--include和--exclude的原始问题中,注释中提到了选项(--drop-empty-revs等),但未实现:https://issues.apache.org/jira/browse/SVN-4729
我什至不确定--exclude选项是最终的还是仍在开发中。

只要您没有副本和重命名,svndumpfilter都可以正常工作。
如果有副本,则必须将它们包括在svndumpfilter中,或者使用svnadmin dump --exclude,但是有一些警告:

  • 仅包含排除项目的修订的修订将被完全没有属性的空修订替换(与svndumpfilter生成的空修订不同)。您可以手动删除它们,但是在它们上使用svndumpfilter只会删除它们的PROPS-END行,从而生成格式错误的转储文件。
  • 包含被排除项目的修改的修订版也将失去其svn:log属性,即使它们也包含被包括项目的修改也是如此。

  • 示例
    创建文件夹B并将其重命名为A后,完整转储包括:
    Revision-number: 1
    Prop-content-length: 108
    Content-length: 108
    
    K 10
    svn:author
    V 6
    654321
    K 8
    svn:date
    V 27
    2019-11-25T09:55:46.768984Z
    K 7
    svn:log
    V 8
    Folder B
    PROPS-END
    
    Node-path: B
    Node-kind: dir
    Node-action: add
    Prop-content-length: 10
    Content-length: 10
    
    PROPS-END
    
    
    Revision-number: 2
    Prop-content-length: 115
    Content-length: 115
    
    K 10
    svn:author
    V 6
    654321
    K 8
    svn:date
    V 27
    2019-11-25T09:58:38.976139Z
    K 7
    svn:log
    V 14
    renamed B to A
    PROPS-END
    
    Node-path: A
    Node-kind: dir
    Node-action: add
    Node-copyfrom-rev: 1
    Node-copyfrom-path: B
    
    
    Node-path: B
    Node-action: delete
    

    从转储(svnadmin dump --exclude "/B" Repository > AOnly.dump)中排除B后,修订版1替换为空的修订版,而修订版2失去了svn:log属性:
    Revision-number: 1
    Prop-content-length: 10
    Content-length: 10
    
    PROPS-END
    
    Revision-number: 2
    Prop-content-length: 83
    Content-length: 83
    
    K 10
    svn:author
    V 6
    654321
    K 8
    svn:date
    V 27
    2019-11-25T09:58:38.976139Z
    PROPS-END
    
    Node-path: A
    Node-kind: dir
    Node-action: add
    Prop-content-length: 10
    Content-length: 10
    
    PROPS-END
    

    关于svn - 从SVN转储中删除空修订的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58994411/

    10-12 00:12
    查看更多