如何将 git 存储库附加到另一个存储库之上

How to append a git repository on top of another

我正在将项目从 TFS 转换为 git,我想保留所有历史记录。

问题是TFS项目是一年前在TFS中移动的。 使用 git-tfs 我可以将两个位置都转换为 git,但现在我有两个 git 存储库:A 和 B。

我已经设法将 A 和 B 作为不同的分支放入同一个存储库中。是否可以将 B 中第一次提交的父级更改为 A 中的最后一次提交?

Branch A: a -> b -> c
Branch B: d -> e -> f

我想要

a -> b -> c -> d' -> e' -> f'

解法:

git filter-branch --parent-filter 'sed "s/^$/-p <last-commit-in-A>/"' HEAD_OF_B

当然,设置一个 graft,就可以做到这一点。如果你对结果满意,你可以做一个 filter-branch 来永久地做这个。或者您可以立即使用 filter-branch--parent-filter.

我可以想到两个解决方案:

  1. 创建父存储库并将存储库 A 和 B 添加为子模块。您可以通过阅读 git submodule.

  2. 的文档了解更多相关信息
  3. 将存储库 B 作为远程添加到存储库 A:

    $ git remote add repoB <directory where repo B is located>
    

    现在您可以从存储库 B 获取、拉取、合并和变基,例如:

    $ git checkout master
    $ git pull repoB master
    

    (如果更有意义,您可以反过来执行此操作:将存储库 A 作为远程添加到存储库 B。相同的概念适用。)