使用 git 快速导出从给定提交开始导出存储库



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

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

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

如果你只有一个分支要合并回来,那么另一种方法是使用嫁接(参见"园艺技巧——嫁接树枝"(:

  • 添加B作为A的遥控器:"remoteB ",
  • 找到表示转换后的 SVN 存储库(以及从中完成新提交(的A的 SHA1:"SHA1-A ",
  • 找到 B 的 SHA1,表示 SVN 存储库转换后的下一个提交(即,从失败的 SVN 转换完成的第一个新提交(:" 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"存储库,你不再需要它了(。

最新更新