将两个或多个 Git 存储库合并为一个

将两个或多个 Git 存储库合并为一个

我必须将两个(也许更多)Git 存储库统一为一个。

给定的存储库为 A、B 等。这些存储库中的所有文件和文件夹末尾都必须是 X,具有以下结构:

X
|- .git
|-A
|-B
...

在此 X 中,子文件夹(A、B、...)不得包含初始 .git 子文件夹。所有历史信息必须进入根部X 存储库的 .git。

显然,存储库(A、B、...)有许多分支、标签等。最后,X 的 Git 日志必须按时间顺序包含来自 A、B 等的初始日志。

这种统一可能吗?如果可以,我该怎么做?

碘化钾

答案1

这是可能的,但是随着每个新分支的出现,情况会变得越来越不愉快。

仅适用于主分支的简化算法:

mkdir new-repo
cd new-repo
git init
git remote add o1 https://github.com/sienori/simple-translate.git
git remote add o2 https://github.com/brndnmtthws/conky.git
git fetch o1
git fetch o2
git merge o1/master
shopt -s dotglob
mkdir A
git mv * A -k
git commit -m repo1
git merge --allow-unrelated-histories o2/main
mkdir B
git mv !(A) B -k
git commit -m repo2

如果你确实想保存所有分支:

  1. 合并之前:在两个存储库中找到不太旧的提交 - 所有将转移到统一存储库的分支的共同父级并在那里创建分支。
  2. 使用在步骤 1 中创建的分支而不是 master/main,从答案的第一部分执行算法。
  3. 对两个存储库的每个分支执行 rebase。

相关内容