【问题标题】:git svn is only converting the last commitgit svn 只转换最后一次提交
【发布时间】:2017-10-03 08:56:59
【问题描述】:

我有一个结构如下的存储库:

project/trunk
project/branches
project/tags
project/cms

如果我这样做:

git svn clone svn://svnurl/svn/project/cms --no-metadata -A ~/tmp/tools/gitsvn_authors/master_gitsvn_format.txt cms

它可以转换,但它只需要'cms'项目的最后一次提交。上次提交后没有历史记录。 cms 没有标准布局。它没有任何主干/分支/标签。

【问题讨论】:

    标签: git svn git-svn


    【解决方案1】:

    对于一次性迁移,git-svn不是转换存储库或部分存储库的正确工具。如果您想将 Git 用作现有 SVN 服务器的前端,这是一个很好的工具,但对于一次性转换,您应该使用git-svn,而是使用更适合的svn2git这个用例。

    有很多称为svn2git 的工具,可能最好的一个是来自https://github.com/svn-all-fast-export/svn2git 的KDE 工具。我强烈推荐使用svn2git 工具。它是我所知道的最好的,并且在你可以使用它的规则文件做什么方面非常灵活。

    您将能够轻松配置svn2gits 规则文件以从当前的 SVN 布局中生成您想要的结果,包括可能存在的任何复杂历史记录,包括从一个 SVN 存储库生成多个 Git 存储库或组合不同的 SVN如果需要,一次运行干净地将 repos 到一个 Git repo 中。

    如果您不是 100% 了解存储库的历史,那么在将 SVN 存储库迁移到 Git 时,http://blog.hartwork.org/?p=763 中的 svneverever 是一个很好的工具来调查其历史记录。


    尽管git-svn 更容易上手,这里还有一些其他原因说明为什么使用 KDE svn2git 而不是 git-svn 除了灵活性之外更胜一筹:

    • svn2git(如果使用正确的历史记录)重建得更好、更干净,尤其是对于具有分支和合并等的更复杂的历史记录
    • 标签是真正的标签,而不是 Git 中的分支
    • git-svn 标签包含一个额外的空提交,这也使它们不属于分支,因此在您将--tags 提供给命令之前,普通的fetch 不会得到它们,因为默认情况下只有标签指向提取的分支也被提取。使用正确的 svn2git 标签是它们所属的地方
    • 如果您在 SVN 中更改了布局,您可以使用 svn2git 轻松配置它,使用 git-svn 您最终会丢失历史记录
    • 使用svn2git,您还可以轻松地将一个 SVN 存储库拆分为多个 Git 存储库
    • 或轻松将同一 SVN 根目录中的多个 SVN 存储库合并到一个 Git 存储库中
    • 正确的svn2git 的转换速度比git-svn 快无数倍

    您知道,git-svn 更差而 KDE svn2git 更优的原因有很多。 :-)

    【讨论】:

    • 我完全同意。我将 svn2git 用于历史较长的大型项目。在这种情况下,虽然项目很小,但使用 'git svn' 会更快。该项目不活跃并且很老,所以我不太关心分支/标签等。
    • 实际上我认为大小并不重要,但 KDE svn2git 总是更可取,特别是如果您已经设置了它,因此没有加速时间。然后使用git svn 也不是真的更快。 :-) 除此之外,您的命令通常应该已经获得了整个历史记录,我认为如果没有看到实际的 SVN 存储库就很难诊断问题。
    猜你喜欢
    • 2015-01-16
    • 1970-01-01
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    • 2011-01-14
    • 1970-01-01
    • 2012-08-31
    • 1970-01-01
    相关资源
    最近更新 更多