我参与了一个包含两个独立存储库的项目,我们很快就会将它们合并为一个单独的存储库。 Lerna的lerna import
命令在这方面非常有用,所以我们将保留项目的历史。
但是,目前在原始存储库中存在一些正在进行的功能分支,当我们迁移到monorepo时可能无法准备好。我的理解是develop
只会从源代码库中提取当前已检出的分支 - 这是正确的吗?
所以我想知道是否有办法再次进行导入,但是只提取自上次导入后提交的提交?
这样,在功能分支上工作的团队一旦准备好就可以合并到develop
分支,我们可以将其转移到monorepo。
或者,是否有处理这种情况的策略?
或者在完成lerna import
之前我是否还要等到所有内容都合并到div
?
谢谢!
答案 0 :(得分:2)
使用@Doğancan Arabacı 的回答和@Matt Mazzola 的评论。我能够为自己做这件事,但我已经添加了我自己的答案以及更多细节,以尝试给出更清晰的解释。
我也遇到过这个问题,因为如果目录存在而无法导入,lerna import
将只允许您导入一次。 See code here。
lerna import
命令从您的原始存储库中获取所有提交,反向并重放它们。然而,当分支出现分歧时,无法重放这些(就像使用 git rebase --onto
命令一样)。 See here 我感觉您可以使用 git rebase
或使用类似的技术来找出分支发散的位置以扩展 lerna import
命令来实现它。我也觉得可能会变得混乱或需要一段时间,所以目前存在的简单方法是:
对于您要导入的每个分支:
来自原始存储库(称为 original
:
git checkout -b lerna-export
packages/original
类似:mkdir packages && mkdir packages/original
git mv -k * ./packages/original
- 您可能需要复制任何未选择的文件然后来自 Lerna 存储库:
git remote add original ###url of repo###
git checkout -b orignal-import
git merge original/lerna-export --allow-unrelated-histories
git push
导入所有分支后,您可能希望在导入所有分支后删除第二个远程:git remove rm original
我在推送其他作者的提交时遇到了 BitBucket 实例的安全性问题,因此我不得不使用 git filter-branch
重写 git 历史记录,但这似乎与要提供的问题并不完全相关详情。
答案 1 :(得分:1)
我不确定lerna在做什么,但是有使用git的手动方法。我们过去在8-10个存储库中也做过类似的事情。
假设我们有MonoRepo和TargetRepo
在几次提交后,您可以随时重复第3-4步,一天之内完成所有操作,然后移至mono repo等。