使用git fast-export从给定的提交开始导出repo

时间:2013-09-25 22:39:07

标签: git version-control merge

我目前正在尝试将当前的工作仓库与从我工作的旧svn仓库转换而来的仓库合并。我希望新的仓库(我们称之为A)与当前的工作仓库(B)合并。

B是尝试将svn repo转换为git并且历史记录完好无效的结果。 A是第二次尝试。如果我只是将B与A合并,那么旧的svn repo中的所有内容都会有重复的提交。我想只包括在最后一次svn提交之后发生的B的历史记录。

我正在寻找git-fast-export,但我没有找到任何可以帮助我的文档。我应该使用git-fast-export,还是有更好的方法?我如何使用git-fast-export或其他东西进行合并?

1 个答案:

答案 0 :(得分:2)

如果您只有一个分支要合并,那么另一种方法是使用移植物(参见“gardening tips -- grafting branches”):

  • B添加为A的遥控器:“remoteB”,
  • 找到A的SHA1代表转换的SVN仓库(以及新的提交已完成):“SHA1-A”,
  • 在转换SVN repo之后找到代表下一次提交B的SHA1(即,从失败的SVN转换完成的第一次新提交):“{{1 }}”,
  • 请参阅this example
  

您可以使用名为grafts的文件覆盖Git中的提交父项,该文件需要驻留在SHA1-B
  它由若干行组成,其中提交哈希由空格字符分隔,其中第一个哈希是您要为其定义父项的提交,以下哈希是父项。

     

注意:您必须使用完整哈希值,而不是缩写词。

     

要修复上述历史记录,我们必须在.git/info/中定义父母:

.git/info/grafts
  • 使移植物永久化:

    SHA1-B SHA1A
    
  • 使本地分支引用您刚刚获得的git filter-branch --tag-name-filter cat -- --all 分支的HEAD,。

    B
  • 合并你的两个分支(你可以删除'remoteB'仓库,你不再需要它了。)