从 bzr 移动到 git:如何将一个分支放在另一个分支之上

moving from bzr to git: how to put a branch on top of another one

我已经搜索了数周的解决方案,但我并不幸运。

我有一个有 5 年历史(截至 2011 年)的集市回购。当我开始从事这个项目时(2011 年),我使用的是 svn,所以 "manager" 只是给了我一个包含 "master" 源代码的 tarball(在 svn 中转换项目是不可能的) .我从那个 tarball 建立了一个 svn repo,直到上个月我一直在努力。 我最近切换到 git,将 svn 和 git 存储库转换为两个 git 存储库。

现在我有两个 git 存储库:以前的 bzr 存储库,涵盖 2006-2011 年,以及我的存储库,涵盖 2011-2016 年。我想做的是在主人身上有一个线性历史,即我想把我的主人(附有分支)"on top" 放在前 bzr 仓库中。

可能吗?

是的,这是可能的。

  1. 首先,将 bzr 存储库转换为 git。您将有两个回购协议,我们称它们为 proj-bzr 和 proj-git.

  2. 在proj-git中,添加proj-bzr作为远程,并获取它。希望 proj-bzr 的最后一次提交和 proj-git 的第一次提交具有相同的文件。

  3. 添加一个嫁接,将最新的 proj-bzr 提交设置为最旧的 proj-git 提交的父级。参见:https://git.wiki.kernel.org/index.php/GraftPoint

  4. 一旦您确信这是正确的历史记录,您可以使用 filter-branch 将 "bake" 移植到存储库中并使其永久化。这将重写 proj-git.

  5. 的所有 SHA-1 哈希