将两个git存储库合并为一个更高级别的存储库



我的项目由两个文件夹组成,每个文件夹都有自己的存储库:

project/
|--frontend/
|--|--.git
|--backend/
|--|--.git

到目前为止,我一直在本地工作。现在我想为我的项目创建一个全局存储库,将其推送到远程,同时保存其中的两个历史记录。正确的做法是什么?

project/
|--.git - has entire history of project (both folders)
|--frontend/
|--|--.git - can be deleted if method requires it
|--backend/
|--|--.git - can be deleted if method requires it

我想你可以通过移动每个路径并将一个合并到另一个

来做到这一点这假设需要将前端添加到后端存储库中,尽管这可能不适合您—如果创建新存储库,请重复每个步骤

警告我还没有测试

备份您的存储库

cp -r project project.bak  # FIXME targz

检出自定义分支(在后端)

(frontend)% git checkout -b custom-move-frontend
(backend)% git checkout -b custom-move-backend

更新远程,使它们成为同一个存储库的一部分

从每个

获取远程
(frontend)% git remote -v  # display remote URL
(backend)% git remote -v

更新后端远程

(backend)% git remote set-url origin "$FRONTEND_REMOTE"

将每个目录的内容移动到其未来名称

(frontend)% git mv . ./frontend
(frontend)% git add .
(frontend)% git commit -m "MY UPDATE TEXT FRONTEND"
(frontend)% git push  # original URL
(backend)% git mv . ./backend
(backend)% git add .
(backend)% git commit -m "MY UPDATE TEXT BACKEND"
(backend)% git push  # branch is pushed to frontend's URL

加入不相关的历史记录

分支不共享一个共同的历史

Git拒绝合并不相关的历史记录

(frontend)% git pull
(frontend)% git checkout -b custom-merge-merge  # from custom-move-frontend
(frontend)% git merge --allow-unrelated-histories origin/custom-move-backend

存储库现在被合并了

额外

我强烈建议添加一个文件,记录发生的事情和具体的提交

用一个唯一的字符串作为提交的前缀可以帮助你以后找到它们

最新更新