我目前正在将一个具有悠久历史的巨大存储库从SVN迁移到git。 svn存储库具有许多分支和标签。我已经从SVN存储库中清理了很多文件,但是当我使用git svn clone命令时,它也会克隆所有已删除的分支和标签。

问题是,是否存在一种有效且简便的方法(简单命令)来排除使用git svnsvn2git(或与此相关的任何其他工具)来获取已删除的分支和标签?

最佳答案

TL; DR:是的,如果您使用正确的svn2git工具

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

有很多称为svn2git的工具,可能最好的一种是https://github.com/svn-all-fast-export/svn2git的KDE工具。我强烈建议您使用svn2git工具。这是我所知道的最好的,它可以很灵活地处理其规则文件。

您将能够轻松配置svn2git的规则文件,以从当前SVN布局中生成所需的结果,包括可能存在的任何复杂历史记录,以及从一个SVN存储库中生成多个Git存储库,或将不同的SVN存储库组合到一个Git存储库中如果愿意,可以很轻松地运行一次,并且排除不迁移的任何路径,分支或标记,尽管如果有人丢弃了宝贵的代码历史记录,我总是会哭泣。

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

尽管git-svn或nirvdrum svn2git较容易入门,但除了灵活性之外,还有一些其他原因导致使用KDE svn2git而不是git-svn更为优越:

  • 通过svn2git(如果使用了正确的代码),可以更好地重建历史记录(如果使用了正确的历史记录),尤其是对于具有分支和 merge 等更复杂历史记录的情况
  • 标签是真实标签,不是Git中的分支
  • 带有git-svn
  • 标记包含一个额外的空提交,这也使它们不属于分支,因此,在您将fetch提供给命令之前,普通的--tags不会获取它们,因为默认情况下,还将仅获取指向获取的分支的标记。使用适当的svn2git标签,它们就属于
  • 如果您在SVN中更改了布局,则可以使用svn2git轻松配置它,使用git-svn您将失去历史记录,最终
  • 使用svn2git
  • ,您还可以轻松地将一个SVN存储库拆分为多个Git存储库
  • 或将同一SVN根目录中的多个SVN存储库轻松组合到一个Git存储库中
  • 使用正确的svn2git进行的转换比使用git-svn的转换快了数百万亿倍。

  • 您会看到git-svn较差而KDE svn2git较优的原因很多。 :-)

    关于git - 在迁移到git(git-svn)时排除已删除的svn分支/标签,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48444548/

    10-11 06:50