SVN迁移到Git:只导入某些分支和历史记录
我的团队正在准备迁移到Git,我们希望从一个小型存储库开始。 由于二进制文件和数百个版本分支,由git-svn创建的初始Git存储库大约为10GB。SVN迁移到Git:只导入某些分支和历史记录
清理大文件很容易,棘手的部分似乎是分支的数量。
对于git迁移,我们想从某个时间点(X)开始,只有某些(最新的)分支。 我们没有一个“主干” - 但保持在一个较长的时间段,而不是不同的版本分支:
---- Version 1 ------------------------
\---------- Version 2--------------
\--------- Version 3----
我很容易找到如何从历史的清洁大斑点(BFG,git的过滤器 - 科)。
我的问题:
我们怎样去掉所有分支,除了少数特定的人从历史所以,我们只有,比如说分支“版本3”中的新鲜资料库?理想情况下,我们希望历史的开始,在开始提交,其中该分支的创建:
--------- Version 3----
有没有办法用git filter-branch
或另一种可能可以做到这一点?
导入整个仓库到Git的,然后扔掉你不感兴趣的树枝
扔掉的部分将是有趣的:d我们怎样才能把它们扔掉,并从根除它们回购历史?
好吧,Git的工作方式,分支只是指向仓库历史记录中的提交。存在分支是因为这些指针存在指向它们。如果删除指针,分支就会消失。如果没有其他指向那些提交,提交实质上将从存储库中删除。
现在除了分支之外,还有另外一个突出的事情,通常指向提交并保持周围:较新的提交取决于它们。 Git的历史记录是一个很大的非循环树,每个提交都有父指向的提交。由此,即使没有分支明确地指向它们,旧的承诺仍然存在;由此,整个历史都起作用。因此如果你想摆脱整个提交行(一个单独的分支),并且这些提交没有在某个时间点合并到另一个分支,那么你所需要做的就是从存储库中删除该分支。那么,什么将指向提交的线,他们将被删除,当你的垃圾收集的资料库:
git branch -D Version_1
git branch -D Version_2
git gc --prune=now
从仓库中这会强制删除分支Version_1
和Version_2
,事后运行垃圾集合从存储库中删除没有指向它的指针的每个对象。
之后,您完全有剩余的Version_3
的历史记录,包括其他两个版本的历史记录中的部分。如果你想删除它,你可以应用this question中解释的方法删除版本3的分支点之前的旧历史。
我知道这是几年后,但如果有人正在寻找回答只选择几个分支,不涉及克隆整个事情:
初始化git的回购与文件夹SVN URL的tmp
git svn init -T <main_branch_name> <repo_url> tmp
更新了“git的/配置”文件来克隆只有特定的分支。 在这种情况下,我们要克隆与模式相匹配feature*
[svn-remote "svn"]
noMetadata = 1
url = <repo_url>
fetch = trunk:refs/remotes/origin/trunk
branches = branches/feature*:refs/remotes/origin/* ## Added line
,现在你可以从SVN仓库获取文件分支
git svn fetch -r $NUMBER:HEAD
的更多信息:
导入整个仓库到Git的迁移,然后扔掉你不感兴趣的树枝 – poke 2014-10-27 14:10:29
扔掉的部分将是有趣的:d我们如何将它们扔掉并从回购历史中消除它们? – Patrick 2014-10-27 14:12:04