2

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

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

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

4

1 回答 1

2

如果您只有一个分支要合并回来,那么另一种方法是使用嫁接(请参阅“园艺技巧 - 嫁接分支”):

  • 添加B为远程A:“ remoteB”,
  • 找到A表示已转换的 SVN 存储库的 SHA1(以及从中完成新提交):“ SHA1-A”,
  • 找到表示 SVN repo 转换B的下一个提交(即从失败的 SVN 转换完成的新提交中的第一个)的 SHA1:“ ”,SHA1-B
  • 这个例子

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

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

要修复上面的历史,我们必须定义父母.git/info/grafts

SHA1-B SHA1A
  • 使移植物永久化:

    git filter-branch --tag-name-filter cat -- --all
    
  • 使本地分支引用B您刚刚嫁接的分支的 HEAD,。

    git branch Bmaster remoteB/master
    
  • 合并你的两个分支(你可以删除'remoteB' repo,你不再需要它了)。

于 2013-09-27T06:52:57.267 回答