微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Git 合并 2 个具有共享源的存储库重组为 monorepo

如何解决Git 合并 2 个具有共享源的存储库重组为 monorepo

上下文:

  1. 一个单一的回购
  2. 回购是“拆分”的,两者都有新的起源;
  3. 单独的存储库从另一个存储库中清理/删除内容
  4. 在两个存储库中都发生了大量新提交。
  5. 我们现在想将它们合并回一个单一的存储库。

简单的合并并不顺利。 由于它们的来源是共享的,并且两者都删除了彼此的文件。简单的合并将删除在其他 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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?