我目前正在将一个具有悠久历史的巨大存储库从SVN迁移到git。 svn存储库具有许多分支和标签。我已经从SVN存储库中清理了很多文件,但是当我使用git svn clone
命令时,它也会克隆所有已删除的分支和标签。
问题是,是否存在一种有效且简便的方法(简单命令)来排除使用git svn
或svn2git
(或与此相关的任何其他工具)来获取已删除的分支和标签?
最佳答案
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-svn
的fetch
提供给命令之前,普通的--tags
不会获取它们,因为默认情况下,还将仅获取指向获取的分支的标记。使用适当的svn2git标签,它们就属于svn2git
轻松配置它,使用git-svn
您将失去历史记录,最终svn2git
的svn2git
进行的转换比使用git-svn
的转换快了数百万亿倍。您会看到
git-svn
较差而KDE svn2git
较优的原因很多。 :-)关于git - 在迁移到git(git-svn)时排除已删除的svn分支/标签,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48444548/