【问题标题】:Using git fast-export to export a repo starting at a given commit使用 git fast-export 从给定提交开始导出 repo
【发布时间】:2014-07-11 13:15:35
【问题描述】:

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

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

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

【问题讨论】:

    标签: git version-control merge


    【解决方案1】:

    如果你只有一个分支要合并回来,那么另一种方法是使用嫁接(参见“gardening tips -- grafting branches”):

    • B 添加为A 的远程:“remoteB”,
    • 找到 A 的 SHA1,表示已转换的 SVN 存储库(并从中完成了新的提交):“SHA1-A”,
    • 找到B 的 SHA1,表示 SVN 存储库转换后的下一个提交(即从失败的 SVN 转换完成的第一个新提交):“SHA1-B”,
    • this example:

    您可以在 Git 中使用一个名为 grafts 的文件覆盖提交的父项,该文件需要驻留在 .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-10-04
      • 2015-01-10
      • 1970-01-01
      • 2012-06-16
      • 1970-01-01
      • 2011-04-05
      • 2011-01-28
      • 2012-09-14
      • 1970-01-01
      相关资源
      最近更新 更多