我正在尝试拆分包含多个项目的旧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,但是有一些警告:
示例
创建文件夹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/