我参与了一个项目,该项目有两个独立的存储库,我们将很快将它们 merge 为一个monorepo。 Lerna的import
命令在这方面将非常有帮助,因此我们将保留项目的历史记录。
但是,当前原始存储库中有一些正在进行的功能分支,当我们转移到monorepo时可能无法准备就绪。据我了解,lerna import
只会从源存储库中提取当前 checkout 的分支-正确吗?
因此,我想知道是否有一种方法可以再次进行导入,但是仅引入自上次导入以来进行的提交?
这样,功能分支上的团队就可以在准备就绪后 merge 到develop
分支,我们可以将其带入monorepo。
另外,是否有应对这种情况的策略?
还是我必须等到所有内容都 merge 到develop
才能执行lerna import
?
谢谢!
最佳答案
使用@DoğancanArabacı的答案和@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 repo 中:
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历史记录,但这似乎与提供详细信息的问题并不完全相关。