0

我正在尝试从结构如下的旧 SVN 存储库创建一个新的 git 存储库:

/root
    trunk
    build_scripts
    packager
    0.1.0
    0.1.1
    0.1.2
    ...etc...

0.x 显然传统上位于tags目录中,并且是软件的版本trunk,代表需要保留的软件的打包版本。另外两个是打包测试的支持脚本。

主要是我对存储库进行了提交——每个版本都是用一个svn copy命令创建的。

这可能不是最佳实践,但它很容易开发——我检查了构建环境,随后检查了主干供我使用。当我准备好时,打包脚本会复制新标签并为我创建一个可下载的包。

我该如何清理它并将其带入 git 存储库?理想情况下,我想使用最佳实践,并希望保留所有历史记录。

我试过使用svn2git

svn2git path-to-repo --trunk trunk --nobranches --authors=/path/to/authors.txt

它为我填充了一个带有主干的 repo,但我没有看到任何标签(git tag什么都不显示)。理想情况下,我也希望将其他脚本也带过来。

我使用 GIT 的主要目的是我的开发方法 —— 有时我被困在远离测试机器的开发中,并希望提交到一个测试存储库,在那里我可以在将其推向上游之前修复错误。现在我只需将损坏的东西提交到中央 SVN 存储库并在测试机器上检查。这显然很糟糕。

如有必要,我很乐意花一些时间清理 SVN 存储库——我还没有准备好放弃它。

4

1 回答 1

2

清理 SVN 存储库对您没有帮助,因为您无法移动现有修订版中的目录,而这正是您要导入的内容。

我没有经验svn2git,但git svn我只是:

  • 仅初始化中继:

    git svn init -A /path/to/authors.txt --prefix=svn/ -t trunk url://to/svn/root
    
  • 通过手动编辑 svn 部分手动列出我要导入的标签和分支,使其看起来像:

    [svn-remote "svn"]
    url = url://to/svn/root
    fetch = trunk:refs/remotes/svn/trunk
    fetch = build_scripts:refs/remotes/svn/build_scripts
    fetch = packager:refs/remotes/svn/packager
    tags = 0.*:refs/remotes/svn/tags/0.*
    

    我不完全确定标签行会起作用;如果没有,您始终可以明确列出所有现有标签。

  • git svn fetch一切设置好后运行

不幸的是,当在 svn 存储库中创建新分支时,您必须在获取到 git 之前添加匹配模式;如果 git-svn 已经获取了一个修订版并且没有创建一个分支,因为它没有一个模式,它将无法返回它并且只会在其上导入任何新的修订版。而且我没有找到任何方法告诉它重新获取那些分支。

于 2013-01-18T08:12:22.650 回答