我参与了一个项目,该项目有两个独立的存储库,我们将很快将它们 merge 为一个monorepo。 Lerna的import命令在这方面将非常有帮助,因此我们将保留项目的历史记录。

但是,当前原始存储库中有一些正在进行的功能分支,当我们转移到monorepo时可能无法准备就绪。据我了解,lerna import只会从源存储库中提取当前 checkout 的分支-正确吗?

因此,我想知道是否有一种方法可以再次进行导入,但是仅引入自上次导入以来进行的提交?

这样,功能分支上的团队就可以在准备就绪后 merge 到develop分支,我们可以将其带入monorepo。

另外,是否有应对这种情况的策略?

还是我必须等到所有内容都 merge 到develop才能执行lerna import

谢谢!

最佳答案

使用@DoğancanArabacı的答案和@Matt Mazzola的评论。我可以自己完成此操作,但是我添加了自己的答案,并提供了更多详细信息,以尝试给出更清晰的解释。
我也遇到了这个问题,因为lerna import仅在您无法导入的目录存在时才允许您导入一次。 See code herelerna import命令从原始存储库中获取所有提交,然后撤消并重播它们。但是,当分支出现分歧时,就无法重播这些消息(就像使用git rebase --onto命令一样)。 See here我觉得您可以使用git rebase或使用类似的技术来选择分支分支以扩展lerna import命令的地方来实现它。我还感到可能会变得凌乱或费时,因此当前存在的简单方法是:
对于要导入的每个分支:
来自原始存储库(称为original:

  • check out 并 pull 出您要导入的分支
  • 从您要导入的分支中剪切一个新分支: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的分支
  • 将分支从原始 merge 到lerna:git merge original/lerna-export --allow-unrelated-histories
  • 如果有任何
  • ,请修复所有冲突
  • 推送至Lerna分支git push

  • 在所有分支导入之后,一旦所有分支都导入,您可能要删除第二个远程对象:git remove rm original我在推送其他作者的提交时,我的BitBucket实例的安全性遇到了一些问题,因此我不得不用git filter-branch重写git历史记录,但这似乎与提供详细信息的问题并不完全相关。

    08-27 06:35