有没有办法用Lerna“刷新”导入的存储库?

时间:2018-04-19 21:10:38

标签: javascript git lerna

我参与了一个包含两个独立存储库的项目,我们很快就会将它们合并为一个单独的存储库。 Lerna的lerna import命令在这方面非常有用,所以我们将保留项目的历史。

但是,目前在原始存储库中存在一些正在进行的功能分支,当我们迁移到monorepo时可能无法准备好。我的理解是develop只会从源代码库中提取当前已检出的分支 - 这是正确的吗?

所以我想知道是否有办法再次进行导入,但是只提取自上次导入后提交的提交?

这样,在功能分支上工作的团队一旦准备好就可以合并到develop分支,我们可以将其转移到monorepo。

或者,是否有处理这种情况的策略?

或者在完成lerna import之前我是否还要等到所有内容都合并到div

谢谢!

2 个答案:

答案 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
  • 将分支从 original 合并到 lerna:git merge original/lerna-export --allow-unrelated-histories
  • 修复任何冲突(如果有)
  • 推送到 Lerna 分支 git push

导入所有分支后,您可能希望在导入所有分支后删除第二个远程:git remove rm original

我在推送其他作者的提交时遇到了 BitBucket 实例的安全性问题,因此我不得不使用 git filter-branch 重写 git 历史记录,但这似乎与要提供的问题并不完全相关详情。

答案 1 :(得分:1)

我不确定lerna在做什么,但是有使用git的手动方法。我们过去在8-10个存储库中也做过类似的事情。

假设我们有MonoRepo和TargetRepo

  • 转到MonoRepo
  • git远程添加目标
  • git checkout -b feature1
  • git merge target / feature1-branch-on-target
  • 对所有所需分支重复步骤3和4。
  • 利润

在几次提交后,您可以随时重复第3-4步,一天之内完成所有操作,然后移至mono repo等。