【问题标题】:SVN to Git migration: Only import certain branches and historySVN 到 Git 迁移:仅导入某些分支和历史记录
【发布时间】:2014-12-22 17:45:17
【问题描述】:

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

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

对于 git 迁移,我们希望从某个时间点 (X) 开始只有某些(最新的)分支。 我们没有“主干”——而是在较长时间内维护的不同版本分支:

 ---- Version 1 ------------------------
     \---------- Version 2--------------
                \--------- Version 3----

我很容易发现如何从历史记录中清除大块(BFG,git filter-branch)。

我的问题:

我们如何才能删除除少数特定分支之外的所有分支从历史记录中,以便我们在新存储库中只有分支“版本 3”?理想情况下,我们希望历史记录从创建此分支的开始提交开始:

 --------- Version 3----

有没有办法通过git filter-branch 或其他可能性来做到这一点?

【问题讨论】:

  • 将整个仓库导入Git,然后把不感兴趣的分支扔掉。
  • 扔掉的部分会很有趣 :D 我们怎样才能把它们扔掉并从回购历史中根除?

标签: git svn version-control git-rewrite-history


【解决方案1】:

将整个仓库导入Git,然后把你不感兴趣的分支扔掉。

丢弃部分将是有趣的部分:D 我们如何丢弃它们并将它们从回购历史中根除?

嗯,Git 的工作方式,分支只是存储库历史中提交的指针。分支之所以存在,是因为存在那些指向它们的指针。如果删除指针,分支就会消失。如果没有其他内容指向这些提交,则这些提交基本上会从存储库中删除。

现在除了分支之外,还有另一个突出的东西通常指向提交并保持周围:更新的提交取决于它们。 Git 的历史是一个大的无环树,其中每个提交都有它指向的父提交。这样,即使没有分支明确指向旧提交,旧提交也会保留;这样,整个历史就起作用了。

因此,如果您想删除一整行提交(一个单独的分支),并且这些提交在某个时候没有合并到另一个分支中,那么您需要做的就是从存储库中删除该分支。然后,没有任何东西会指向提交行,并且当您对存储库进行垃圾收集时,它们将被删除:

git branch -D Version_1
git branch -D Version_2
git gc --prune=now

这将强制从存储库中删除分支Version_1Version_2,然后运行垃圾收集,从存储库中删除所有没有指向它的指针的对象。

之后,您将获得 Version_3 的完整历史记录,包括其他两个版本中属于其历史记录的部分。如果你也想删除它,你可以应用this question中解释的方法删除版本3分支点之前的旧历史。

【讨论】:

    【解决方案2】:

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

    使用文件夹tmp中的SVN URL初始化git repo

    git svn init -T <main_branch_name> <repo_url> tmp
    

    更新“.git/config”文件以仅克隆特定分支。 在这种情况下,我们将只克隆匹配模式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
    

    更多信息:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多