我目前正在将一个历史悠久的巨大存储库从 SVN 迁移到 git。svn 仓库有很多分支和标签。我已经从 SVN 存储库中清除了很多它们,但是当我使用该git svn clone命令时,它也会克隆所有已删除的分支和标签。
问题是,是否有一种有效且简单的方法(简单命令)来排除使用git svn或svn2git(或任何其他与此相关的工具)获取已删除的分支和标签?
TL;DR:是的,如果您使用正确的svn2git工具
对于一次性迁移来说,git-svn它不是用于转换存储库或部分存储库的正确工具。如果您想使用 Git 作为现有 SVN 服务器的前端,那么它是一个很棒的工具,但对于一次性转换,您不应该使用,git-svn但svn2git它更适合此用例。
有很多名为 的工具,最好的可能是来自https://github.com/svn-all-fast-export/svn2gitsvn2git的 KDE 工具。我强烈建议使用该工具。这是我所知道的最好的,并且它的规则文件非常灵活。svn2git
您将能够轻松配置svn2git规则文件,以从当前 SVN 布局生成您想要的结果,包括可能存在的任何复杂历史记录,包括从一个 SVN 存储库生成多个 Git 存储库,或将不同的 SVN 存储库干净地组合到一个 Git 存储库中如果您愿意的话,可以在一次运行中排除您不迁移的任何路径、分支或标签,尽管如果有人丢弃宝贵的代码历史记录,我总是会哭一会儿。
如果您不是 100% 了解存储库的历史记录,svnevereverhttp ://blog.hartwork.org/?p =763 是一个很好的工具,可以在将 SVN 存储库迁移到 Git 时调查其历史记录。
尽管git-svnnirvdrumsvn2git更容易上手,但除了其灵活性之外,svn2git还有以下一些进一步的原因说明为什么使用 KDE 更优越:git-svn
svn2git(如果使用了正确的历史记录),对于具有分支和合并等的更复杂的历史记录尤其如此git-svn一个额外的空提交,这也使得它们不属于分支的一部分,因此在您向命令fetch提供之前,普通不会获取它们,因为默认情况下,也只获取指向所获取分支的标签。--tags有了正确的 svn2git 标签,它们就在它们所属的地方svn2git,轻松配置它git-svn最终您将丢失历史记录svn2git可以轻松地将一个 SVN 存储库拆分为多个 Git 存储库svn2git使用正确的转换比使用正确的转换快数亿倍git-svn你看,有很多原因可以解释为什么 KDEgit-svn更差而 KDEsvn2git更优越。:-)