我正在尝试将旧的 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
- 发展
存储库中还有更多内容,但这就是它的要点。这里要注意的重要一点是
- 没有后备箱
- 标签结构不平坦
现在我正在尝试运行最少的步骤。我使用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 export
或svnadmin 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 服务器没有任何形式的管理访问权限。