Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SVN到Git迁移:仅导入某些分支和历史记录_Git_Svn_Version Control_Git Rewrite History - Fatal编程技术网

SVN到Git迁移:仅导入某些分支和历史记录

SVN到Git迁移:仅导入某些分支和历史记录,git,svn,version-control,git-rewrite-history,Git,Svn,Version Control,Git Rewrite History,我的团队正准备迁移到Git,我们希望从一个小型存储库开始。 由于二进制文件和数百个版本分支,Git svn创建的初始Git存储库大约有10GB大 清理大文件很容易,棘手的部分似乎是分支的数量 对于git迁移,我们希望从某个时间点(X)开始,只使用某些(最新的)分支。 我们没有“主干”,而是在较长时间内维护的不同版本分支: ---- Version 1 ------------------------ \---------- Version 2--------------

我的团队正准备迁移到Git,我们希望从一个小型存储库开始。 由于二进制文件和数百个版本分支,Git svn创建的初始Git存储库大约有10GB大

清理大文件很容易,棘手的部分似乎是分支的数量

对于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
,然后运行垃圾回收,从存储库中删除没有指向它的指针的所有对象


之后,您就有了
版本3
的完整历史记录,包括属于其历史记录一部分的其他两个版本的部分。如果您也想删除它,您可以应用中介绍的方法删除版本3的分支点之前的旧历史记录。

我知道这已经晚了几年,但如果有人正在寻找答案,只选择几个不涉及克隆整个内容的分支:

在文件夹
tmp

git svn init -T <main_branch_name> <repo_url> tmp
现在,您可以从SVN存储库获取文件

git svn fetch -r $NUMBER:HEAD
更多信息:

  • 选择分支机构:
  • 选择开始修订:
  • 我写的关于分支选择迁移的帖子

将整个存储库导入Git,然后扔掉你不感兴趣的分支。扔掉的部分将是有趣的部分:D我们如何扔掉它们并从回购历史中消除它们?
git svn fetch -r $NUMBER:HEAD