如何将 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
.
我可以想到两个解决方案:
创建父存储库并将存储库 A 和 B 添加为子模块。您可以通过阅读 git submodule
.
的文档了解更多相关信息
将存储库 B 作为远程添加到存储库 A:
$ git remote add repoB <directory where repo B is located>
现在您可以从存储库 B 获取、拉取、合并和变基,例如:
$ git checkout master
$ git pull repoB master
(如果更有意义,您可以反过来执行此操作:将存储库 A 作为远程添加到存储库 B。相同的概念适用。)
我正在将项目从 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
.
我可以想到两个解决方案:
创建父存储库并将存储库 A 和 B 添加为子模块。您可以通过阅读
git submodule
. 的文档了解更多相关信息
将存储库 B 作为远程添加到存储库 A:
$ git remote add repoB <directory where repo B is located>
现在您可以从存储库 B 获取、拉取、合并和变基,例如:
$ git checkout master $ git pull repoB master
(如果更有意义,您可以反过来执行此操作:将存储库 A 作为远程添加到存储库 B。相同的概念适用。)