将现有仓库合并至monorepo的packages子目录遇Git冲突如何解决?
解决多仓库合并到Monorepo子目录的冲突问题
1. 撤销错误操作,恢复初始状态
先清理之前在packages目录下的错误操作,回到Monorepo的干净状态:
# 回到Monorepo根目录 cd ../ # 进入packages目录,移除临时远程仓库并重置到操作前状态 cd packages git remote remove existing-1 git reset --hard HEAD
2. 临时克隆目标仓库并重写历史
为避免影响原仓库,先克隆一份到临时目录,再将所有文件的历史迁移到指定子目录下:
cd ../ git clone git@... temp-existing-1 cd temp-existing-1
使用git filter-repo(推荐,比旧的filter-branch更稳定)重写历史,把仓库内所有文件都移动到packages/existing-1路径下:
git filter-repo --to-subdirectory-filter packages/existing-1
若无法使用
git filter-repo,可替代使用git filter-branch(不推荐,性能和可靠性较差):git filter-branch --tree-filter 'mkdir -p packages/existing-1 && git ls-files -z | xargs -0 mv -t packages/existing-1' -- --all
3. 合并重写后的仓库到Monorepo
回到Monorepo根目录,将修改后的临时仓库作为远程源引入,执行合并:
cd ../your-monorepo git remote add temp-existing-1 ../temp-existing-1 git fetch temp-existing-1 git merge temp-existing-1/master --allow-unrelated-histories
此时合并不会再出现根目录文件冲突,因为目标仓库的所有文件都被限定在packages/existing-1子目录内,与Monorepo根目录的文件完全隔离。
4. 清理临时资源
合并完成后,移除临时远程源和临时仓库目录:
git remote remove temp-existing-1 rm -rf ../temp-existing-1
内容的提问来源于stack exchange,提问作者Phil
相关产品推荐
相关产品推荐

