如何将两个git仓库合并为一个仓库放在上层文件夹里?

6

我在同一个父文件夹中有两个仓库,我希望将它们合并到父文件夹中,并尽可能保留历史记录而不产生最小差异。

parent/
--code1/.git
--code2/.git

I would like:

parent/.git
--code1
--code2

是否可以同时保留两个版本库的历史记录,或者至少是code1文件夹的历史记录?不幸的是,在这两个版本库中有一些同名的分支。理想情况下,我们希望按提交日期在.git中保存两个版本库的所有历史记录,但我还没有找到一个简单的解决方案(其中一个复杂之处在于git mv会显示所有更改文件的提交前/后差异,但我们可以接受这种情况)。


这个回答解决了你的问题吗? 合并两个Git仓库而不破坏文件历史记录 - Inigo
git subtree或子树合并策略有帮助吗? - knittl
3个回答

0
你应该能够使用 git pull 方法。
请按照以下步骤操作:
$ git init
$ git pull code1
$ git pull code2

这应该创建一个合并..接受合并(如果有冲突则解决冲突)..

要将分支拉入父git仓库,您可以执行以下操作:

$ git checkout -b branchName
$ git pull code1 branchName

编辑:我错过了您仍然想保留code1code2文件夹的部分。当您合并这两个存储库时,这实际上是不可能的,因为它正在执行它所说的操作:将它们合并到父文件夹中。之后,您需要手动将源文件移动到code1code2中,并进行进一步的提交。


0

你想要将两个不同的代码库(第一个和第二个)合并到一个新的代码库中,同时保留两者的 Git 历史记录:

创建一个新的 Git 代码库并进行初始提交:

mkdir newRepository
git init
touch .gitignore
git add .gitignore
git commit .gitignore -m 'init'

获取并合并第一个:

git remote add first pathTo/first
git fetch first
git merge first/master

获取并合并第二个:

git remote add second pathTo/second
git fetch second
git merge second/master

0

我遇到了同样的问题,并找到了这篇文章。最终,我通过重组每个存储库来解决了这个问题,然后将它们合并在一起。

repo1*content -> repo1\repo1newname*content repo2*content -> repo2\repo2newname*content

每个存储库都有自己的分支,从HEAD/main中剪切出来。

然后,我将两个存储库作为远程添加到新存储库中,并从这些分支中拉取。

所以最终变成了这样:

newrepo
..\repo1newname ..\repo2newname

重构为每个文件添加了一个重命名提交,因此每个文件的提交历史记录都得以保留,只是增加了一个用于重命名和另一个用于合并的提交。

希望这可以帮到您


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接