2

我正在使用svndumpfilter从更大的存储库中提取单个项目并将它们导入到自己的存储库中。像这样的东西:

svndumpfilter include --drop-empty-revs --renumber-revs Trunk/Source/Project1 < full.dump > Project1.dump

它在一个项目中运行良好,但在第二个项目中,我注意到生成的过滤转储不是从添加路径开始的。请参阅前两个修订版(重新编号):

SVN-fs-dump-format-version: 2

UUID: c6612063-4e6b-459c-a579-78605fb1e4b5

Revision-number: 0
Prop-content-length: 56
Content-length: 56

K 8
svn:date
V 27
2010-05-11T20:45:07.903005Z
PROPS-END

Revision-number: 1
Prop-content-length: 128
Content-length: 128

K 7
svn:log
V 27
Fixed code after branching.
K 10
svn:author
V 6
somedude
K 8
svn:date
V 27
2010-09-21T23:07:51.719341Z
PROPS-END

Node-path: Trunk/Source/Project1/Project1.csproj
Text-content-md5: 9d127596909e2a9921f1ec1c0223e1ed
Node-action: change
Text-content-sha1: 22eb675e0a5bfb41092de6ed39dc7c4d2a15dbd5
Node-kind: file
Text-content-length: 5178
Content-length: 5178

Trunk/Source/Project1/Project1.csproj请注意它是如何在首先添加它之前尝试“改变”的?svnadmin load毫不奇怪,在过滤转储上运行时,我得到“找不到文件” 。有任何想法吗?

4

1 回答 1

3

有以下三种方式:

  1. 在加载转储文件之前通过提交添加丢失的文件夹:svn mkdir http://server/svn/project/Trunk -m "Created Trunk"
  2. 手动将创建Trunk文件夹的节点记录添加到转储中:

    Revision-number: 1
    Prop-content-length: 128
    Content-length: 128
    
    K 7
    svn:log
    V 27
    Fixed code after branching.
    K 10
    svn:author
    V 6
    somedude
    K 8
    svn:date
    V 27
    2010-09-21T23:07:51.719341Z
    PROPS-END
    
    Node-path: Trunk/
    Node-kind: dir
    Node-action: add
    Prop-content-length: 48
    Content-length: 48
    
    PROPS-END
    
    
    Node-path: Trunk/Source/Project1/Project1.csproj
    Text-content-md5: 9d127596909e2a9921f1ec1c0223e1ed
    Node-action: change
    Text-content-sha1: 22eb675e0a5bfb41092de6ed39dc7c4d2a15dbd5
    Node-kind: file
    Text-content-length: 5178
    Content-length: 5178
    
  3. 根本不要使用svndumpfilter,因为它是被设计破坏的(svndumpsanitizer主页有一个很好的解释)。您很有可能会在转储中进一步遇到其他错误。

我目前正在拆分一个包含大量合并、移动和其他此类事情的极其复杂的回购,我可以说周围没有任何东西可以正确处理 100% 拆分 svn 转储。

例如,众所周知的svndumpfilterIN至少包含三个主要错误(我只报告了其中一个,而另外两个更邪恶)并且在我的回购中惨遭失败。稍后我会尝试在 GitHub 上分享它的固定版本,但在目前的状态下,我不推荐它。

所以在我看来,你最好的机会是尝试上面提到的没有选项的svndumpsanitizer--redefine-root,因为它也被窃听了(bugreport 来了)。如果您使用的是 Windows,它可以与最新的Visual Studio Community 2013(免费)一起正常编译。


更新于 Y2K17

上面的最后两段不再相关,因为我已经修复了svndumpfilterIN中的所有问题,这些问题阻止了我转换我的 repo。我的 PR已经合并到基础 repo 中,所以试试看。我仍然不能保证 100% 成功,但现在你的机会要高得多。

于 2015-02-09T15:36:41.937 回答