使用@Doğancan Arabacı 的答案和@Matt Mazzola 的评论。我能够为自己做到这一点,但我添加了自己的答案以及更多细节,以尝试给出更清晰的解释。
我也遇到了这个问题,因为lerna import
如果目录存在,你只能导入一次,你不能导入。请参阅此处的代码。
该lerna import
命令从原始存储库中获取所有提交,反转并重放它们。然而,当分支分歧时,没有办法重播这些(就像你可能使用git rebase --onto
命令一样)。看到这里我觉得你可以使用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 历史记录git filter-branch
,但这似乎与提供详细信息的问题并不完全相关。