SVNDumpFilter 在添加之前更改路径?

Posted

技术标签:

【中文标题】SVNDumpFilter 在添加之前更改路径?【英文标题】:SVNDumpFilter changing paths before adding them? 【发布时间】:2014-07-22 14:00:39 【问题描述】:

我正在使用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 时,我得到“找不到文件”。有什么想法吗?

【问题讨论】:

【参考方案1】:

有三种方式:

    在加载转储文件之前通过提交添加缺少的文件夹:svn mkdir http://server/svn/project/Trunk -m "Created Trunk"

    手动将创建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
    

    根本不要使用svndumpfilter,因为它被设计破坏了(svndumpsanitizer 的home page 很好地解释了原因)。您很有可能会在转储中进一步遇到其他错误。

我目前正在拆分一个极其复杂的 repo,其中包含很多合并、移动和其他类似的东西,我可以说周围没有任何东西可以 100% 正确地处理拆分 svn 转储。

罢工>

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

所以在我看来,你最好的机会是尝试上面提到的svndumpsanitizer 而不使用--redefine-root 选项,因为它也有错误(错误报告即将到来)。如果您使用的是 Windows,它可以使用最新的 Visual Studio Community 2013(免费)进行正常编译。


2017 年更新

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

【讨论】:

谢谢,我不记得我是如何解决这个问题的,但我想我最终手动编辑了文件并在需要的地方添加了丢失的文件/文件夹。

以上是关于SVNDumpFilter 在添加之前更改路径?的主要内容,如果未能解决你的问题,请参考以下文章

svndumpfilter 2 + Windows 如何

svndumpfilter2 vs svndumpfilter3

手动更改后重新计算 SVN 转储中的校验和

在更改之前获取输入的旧值并将总值更改为 + 或 -

svndumpfilter - 不支持的转储文件版本

svndumpfilter --drop-empty-revs 保持填充修订