0

我正在尝试将旧的 svn 存储库转换为 git。在阅读了几篇描述使用 git-svn 执行此任务的缺点的文章之后,特别是对于具有非标准布局的存储库,我决定尝试一下 reposurgeon。在最初使用来自 Ubuntu 软件包源 (4.3) 的版本后,我切换到最新的版本(4.14;从源代码构建)以防万一。

遗憾的是,到目前为止,我只能生成一个空的 git 存储库。似乎我无法弄清楚如何正确使用 reposurgeon。

这是我要转换的 svn 存储库的基本结构:

  • 分支机构
    • 1.0.x
    • 1.1.x
  • 标签
    • 发展
      • 1.0.0
      • 1.0.1
      • 1.0.2
      • 1.1.0
    • 生产
      • 1.0.0
      • 1.0.1

存储库中还有更多内容,但这就是它的要点。这里要注意的重要一点是

  1. 没有后备箱
  2. 标签结构不平坦

现在我正在尝试运行最少的步骤。我使用http://www.catb.org/~esr/reposurgeon/repository-editing.html#quickstart作为指导方针,因此在为存储库创建作者地图后,我执行了以下操作:

repotool mirror URL project-mirror
reposurgeon
  read project-mirror
  authors read <project-mirror.map
  prefer git
  rebuild project-git

当我read project-mirror在 reposurgeon 中运行时(project-mirror 是我使用 repotool 创建的镜像的目录),我得到以下输出:

reposurgeon: nonexistent source "test" on pathmap copy
reposurgeon: component "test" to be deleted is missing
reposurgeon: 1898910: missing required date field
* project-mirror
reposurgeon: 2 new log message(s)

首先创建一个 SVN 转储(使用repotool exportsvnadmin dump在我的本地镜像上)并读取它会导致相同的结果。

运行rebuild project-git产生以下结果:

reposurgeon: not trying to checkout an empty repository
reposurgeon: rebuild is complete.
reposurgeon: preserved files restored.

这将创建一个空的 git 存储库:没有提交、没有分支、没有标签。我不希望我在上面发布的命令链会导致我想要的结果(毕竟文档中甚至提到到达那里是一个迭代过程),但我希望至少有一些提交和/ 或 git 存储库中的分支。

任何正确方向的指针将不胜感激。

PS:还需要注意的是,在此过程中,SVN 服务器可以而且不得以任何方式进行更改。我只有对相关存储库的读取权限。我对此 SVN 服务器没有任何形式的管理访问权限。

4

1 回答 1

0

转换您的存储库不应成为问题。以下是一些值得检查的事情:

  1. 指定源类型;为此使用sourcetype svn
  2. 通过指定嵌套标签结构branchify branches/* tags/development/* tags/production/*

您可能还想展平标签名称,例如

branchmap :tags/development/(.+):tags/dev_\1: \
          :tags/production/(.+):tags/prod_\1:
于 2020-11-19T09:16:10.137 回答