WHERE SVN2GIT "WARN: Branch ... in repository ... doesn't exist at revision ... -- did you resume from the wrong revision?" 无法继续

KDE SVN2GIT "WARN: Branch ... in repository ... doesn't exist at revision ... -- did you resume from the wrong revision?" Can't continue

我正在尝试将内部修订超过 24k 的 11GB SVN 存储库迁移到单个 GIT 存储库。

我使用 svnrdump 命令对 SVN 进行了单个文件转储,并将其加载到我的本地 SVN 服务器,放置在我的 MacBook 机器上。

我从 https://github.com/svn-all-fast-export/svn2git 存储库下载了 svn2git。

由于 SVN 和 GIT 处理标签的方式不同,我使用了 svn2git 示例目录中的 merged-branches-tags.rules,它看起来像这样(我已经删除了注释): 创建存储库 myproject 结束存储库

match /trunk/
  repository myproject
  branch master
end match

match /(branches|tags)/([^/]+)/
  repository myproject
  branch 
end match

然后我使用了文档中描述的 docker 图像解决方案(在我的控制台中它是一行。我将它拆分以阐明我在做什么):

docker run --rm -it \
    -v /Users/me/work/SVN/dest:/workdir \
    -v /Users/me/work/svnServer/repositories/my_svn_repo:/tmp/svn \
    -v /Users/me/work/SVN/svn2git/samples:/tmp/conf \
    svn2git /usr/local/svn2git/svn-all-fast-export \
    --rules /tmp/conf/merged-branches-tags.rules \
    --add-metadata --svn-branches --debug-rules --svn-ignore --empty-dirs \
    /tmp/svn/

在第一次尝试期间,我在修订版 12600 和 126001 之间遇到错误:

Exporting revision 12601     /tags/7.0M0p0000 was copied from /tags rev 12600
rev 12601 /tags/7.0M0p0000/ matched rule: "/tmp/conf/merged-branches-tags.rules:28 /(branches|tags)/([^/]+++++
)/"    exporting.
.WARN: SVN reports a "copy from" @ 12601 from /tags @ 12600 but no matching rules found! Ignoring copy, treating as a modification
WARN: Transaction: "7.0M0p0000" is not a known branch in repository "myproject"
Going to create it automatically
add/change dir ( /tags/7.0M0p0000 -> "7.0M0p0000" "" )
+++++
WARN: Branch "7.0M0p0000" in repository "myproject" doesn't exist at revision 12601 -- did you resume from the wrong revision?
Failed to write to process: Process crashed for repository myproject
 6223345 modifications from SVN /tags/7.0M0p0000/ to myproject/7.0M0p0000%

我已经检查过了,在 rev 12601 中有一个名为“7.0M0p0000”的新标签,我将把它作为一个分支导入,但它不在 rev 12600 的 repo 中。

您有什么想法可以解决这个问题并继续我的迁移吗? 非常感谢任何帮助。

经过进一步调查,发现上述“7.0M0p0000”标签是在版本 12601 中创建的,作为版本 12600 中所有标签的副本。

我在使用以下命令创建的转储文件中找到了它:

svnrdump dump -r 12600:12601  --incremental http://xxx.xxx.xxx.xxx/svn/my_repo > my_repo.dump

有一个条目:

Revision-number: 12601
...
Node-path: tags/7.0M0p0000
Node-kind: dir
Node-action: add
Node-copyfrom-rev: 12600
Node-copyfrom-path: tags

KDE 的 svn2git 似乎无法处理这种情况(这可能是误操作)。

我找到的唯一解决方案是通过向我的 merged-branches-tags.rules 文件添加一个匹配项来完全跳过此标记(匹配表达式的顺序很重要):

match /tags/7.0M0p0000/
  min revision 12600
  max revision 12606
end match
...
match /(branches|tags)/([^/]+)/
  repository myproject
  branch 
end match