如何导入另一个 Git库到现有的Git库并保留提交记录

https://www.cnblogs.com/huangtailang/p/4730336.html

问题描述:

我在本地有两个Git库项目(D1=PC项目 包含通用项目,D2=移动项目 也包含通用项目这两个项目在同一目录下),因为这两个项目使用的通用项目是一样的如数据库访问等 只有显示层(view)不一样而已,因为在之前没有很好的规划而导致出现现在的问题,即如果D1里更改了通用项目的文件 那么D2需要先将D1通用项目的更改先合并过来然后再处理D2项目(防止出现差异导致出现问题),反之也是一样,所以如果通用项目文件经常更新时,我就需要浪费大量的时间在合并这两个Git仓库上 所以要现在要将把这两个库项目合并到一个库里以分支的方式(D1,D2)进行管理(开发PC项目时切换到D1分支,开发移动项目时切换到D2分支) 然后通用项目分别从D1,D2分支迁移出来到新分支Common单独进行管理,然后D1和D2删除通用项目文件 现在我如何将一个库合并到另一个库呢(提交记录必须不能丢失)?经过几天的测试终于解决 需要解决的问题:     把D2仓库的所有内容和提交记录合并到D1 仓库中中,然后以分支的方式来管理D2项目    如何从D2仓库和D1仓库迁移出通用项目文件并保留提交记录以后会单独处理

目前的目录结构
F:
 |--   D1
       |-- D1.txt
        |--.git
 |--   D2
       |-- D2.txt
        |--.git
 
我期望的目录结构
F:
 |--   D1
       |-- D1.txt
        |--.git
          |--   D2  合并D2仓库文件和提交记录到D1,以分支的方式管理
          |-- D2.txt

D1仓库的提交记录

 使用remote加fetch的方法将D2的文件和提交合并到D1

  1. 切换到D1 Git仓库
  2. 使用“git remote add d2 ../d2”将D2仓库中所有信息以远程仓库的方式添加到D1的新建d2分支里
  3. 使用“git fetch –all”获取d2远程仓库的所有信息,–a 代表获取D2仓库的所有分支和tag等信息(合并前请尽量保持一个分支,否则合并后提交记录不忍直视)
  4. 切换到D1仓库的主分支master
  5. 合并已添加的远程分支d2到你需要的分支
  6. 处理合并后的分支,如删除远程分支不需要的分支,整理或精简合并后的提交历史,删除D2项目文件等(GIT会将两个仓库的提交按时间的方式来进行合并)

The default behavior has changed since git 2.9:

“git merge” used to allow merging two branches that have no common base by default, which led to a brand new history of an existing project created and then get pulled by an unsuspecting maintainer, which allowed an unnecessary parallel history merged into the existing project. The command has been taught not to allow this by default, with an escape hatch --allow-unrelated-histories option to be used in a rare event that merges histories of two projects that started their lives independently.

使用pull直接进行合并

  1.  使用“git pull  远程分支地址”直接合并,应该在新的分支里进行该操作,然后再进行合
  2. 处理合并后的分支,如删除远程分支不需要的分支,整理或精简合并后的提交历史,删除D2项目文件等(GIT会将两个仓库的提交按时间的方式来进行合并)

 以上两种方式都可以将一个Git仓库的文件和提交合并到另一个Git仓库(Pull更简单点)因为对git并不是太了解所以并不太清楚这个之间的关系和区别 stackoverflow上有人说可以使用“git-fast-export”来实现,但搞了一二天愣是没有实现因为之前测试时没有截图所以也忘记错误是什么了,现在也懒的再测试一遍 参考:    Import a git repository with all its history into an existing git repositoryMerge two git repos into one without renaming filesCombining multiple git repositories如何导入现有的存储库到另一个 Git ? Can I move the .git directory for a repo to it’s parent directory?

LEAVE A COMMENT