如何解决Git 合并 2 个具有共享源的存储库重组为 monorepo
上下文:
简单的合并并不顺利。
由于它们的来源是共享的,并且两者都删除了彼此的文件。简单的合并将删除在其他 repo 中仍在使用的文件。
鉴于“删除提交”分布在更长的时间内,因此很难仅恢复“删除提交”。
我们可以简单地放弃一个回购的历史,但更愿意保留它。
在我看来,如果我们可以将合并视为“单独的”父级并与 --allow-unrelated-histories
合并,那可能没问题。
## Simplified version of actual events:
git init my-repo
cd my-repo
## add 2 dirs with their own stuff
mkdir repo1
touch repo1/file1.txt
mkdir repo2
touch repo2/file2.txt
## commit in mono repo
git add .
git commit -m"mono repo commit"
## decided to not be a mono repo
## for a while they commit to sperate origins.
## both decide to remove the other repo's stuff
git checkout -b repo1
rm -rf repo2
git add .
git commit -m"single-repo1 commit"
git checkout master
git checkout -b repo2
rm -rf repo1
git add .
git commit -m"single-repo2 commit"
## Now they decide that we will be a mono repo again.
## we need to merge repo1 into repo2.
## trying to find the delete commit proves to be tricky.
## basically i would prefer to pretend that repo2 doesn't share the same origin.
## so that merging would result in:
# - repo1/file1.txt
# - repo2/file2.txt
解决方法
所以我已经完成了您所说的操作,您自己的答案是一种选择:使用 --allow-unrelated-histories
将完全独立的存储库合并在一起。甚至尝试也很有趣:像您一样创建两个完全不同的存储库并将它们合并在一起。作为一组 10 人的 git
培训练习,我让他们在使用基于其帐户名的文件名创建独立的存储库后将他们的存储库合并在一起。看的很有趣:-)
但是,如果他们有一个类似的代码库,并且有大量的更改,那么您很可能会遇到大量的冲突。对此没有简单的解决方案。 git
会尽可能多地帮助您,但除非它们主要是独立的更改(不太可能),否则它永远不会很好。
另一种选择是重新创建原始的 mono-repository 并尝试添加其他两个不同的 repository 作为重新创建的 mono 的分支,然后通过合并或 rebase 将它们合并到 mono-存储库的 main
分支。这将在功能上做同样的事情,但会更清楚地显示真实的历史。但合并方面的痛苦仍然存在。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。