SVN到GIT,根目录中有标签

时间:2013-01-18 07:56:41

标签: git svn version-control git-svn

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

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

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

主要是我提交存储库 - 每个版本都是使用svn copy命令创建的。

这可能不是最好的做法,但它很容易开发 - 我检查了构建环境,随后检查了trunk以供我使用。打包脚本会复制出新标签,并在我准备好时为我创建一个可下载的包。

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

我尝试过使用svn2git

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

为我填充了一个带有主干的仓库,但是我没有看到任何标签(git tag没有显示任何内容)。理想情况下,我也希望将其他脚本带回来。

我使用GIT的主要目的是我的开发方法 - 有时候我会坚持从测试机器开发,并且想要提交一个测试存储库,我可以在将其推向上游之前修复错误。现在我只是将破碎的东西提交到中央SVN存储库并检查测试机器。这显然很糟糕。

如果有必要,我很乐意花一些时间清理SVN回购 - 我还没准备好抛弃它。

1 个答案:

答案 0 :(得分: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 repo中创建一个新分支时,你必须在获取git之前添加匹配模式;如果git-svn已经获取了一个修订版而没有创建一个分支,因为它没有它的模式,它将无法返回到它并且只会导入它的任何新修订版。而且我没有找到任何方法告诉它重新删除那些分支。