gpt4 book ai didi

git - 如何在不破坏文件历史记录的情况下 merge 多个 Git 存储库?

转载 作者:太空狗 更新时间:2023-10-29 13:12:35 26 4
gpt4 key购买 nike

我们正在尝试从 TFS 迁移。使用 git-tfs 工具,我们能够迁移现有存储库的部分内容,但它会在某些麻烦的 checkin 时崩溃。我们已经能够制作一组拼凑的 Git 存储库,涵盖大部分原始 TFS 提交。

目前有:

  • 从 2009 年到 2011 年有变化的 Git 代码库
  • 从 2011 年到 2016 年有变化的 Git 代码库
  • Git 存储库,包含从 2016 年至今的更改

期望:

  • 涵盖 2009 年至今的 Big Git 存储库
  • 任何一直存在的文件都只有一个文件历史

我们有什么办法可以将它们重新组合成一个 Git 存储库吗?我们不关心保留 SHA(无论如何它们都是新的),但我们不能破坏文件历史记录。

最佳答案

编辑:最新版本的 git 现在扩展了 git replace命令使用 git replace --graft <commit> <parent> 更容易做到这一点(参见 https://git-scm.com/docs/git-replace#Documentation/git-replace.txt---graftltcommitgtltparentgt82308203)


有一种简单的方法可以使用 git 的“移植”功能来做到这一点。这是一个与 git replace 目标相同的功能@torek 提到的,但在您的情况下更容易使用。

首先,导入同一个存储库中的所有历史记录。在最近的存储库中,为另外两个做:

  1. git remote add c:/path/toward/other/repository
  2. git fetch

然后创建git移植文件.git/info/grafts跟随帮助: https://git.wiki.kernel.org/index.php/GraftPoint(你的文件中应该有 2 行)

如果您使用 git log或任何 Git GUI,您现在应该可以看到您想要的历史记录。

如果您满意,则重写历史以使其确定:

git filter-branch

您现在可以将您的历史推送到中央存储库或共享它。

Ps:另一个关于这个主题的文档,但是融化了移植物并替换了 git 特性:https://legacy-developer.atlassian.com/blog/2015/08/grafting-earlier-history-with-git/

关于git - 如何在不破坏文件历史记录的情况下 merge 多个 Git 存储库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47928855/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com