【发布时间】:2017-04-19 23:54:38
【问题描述】:
我的情况是我有两个 Git 存储库需要合并到一个存储库中(实际上还有更多存储库,但我可以从两个开始)。
这两个存储库是:
- 主存储库 A。
- 第二个存储库,B。
存储库 B 中的代码依赖于存储库 A 中的代码(但 不是 反之亦然),以及两个存储库的历史记录按时间顺序彼此跟随 - 大致(即 repo B 中的特定提交通常需要来自 repo A 的提交,提交时间非常相似)。
两个存储库中存在冲突的分支和标签名称(不能保证它们属于一起),但只需要保留来自 A 的引用。
新存储库 C 的要求是:
- 需要保留来自 A 的所有引用(分支和标签)。
- 仅需要保留来自 B 的主分支提交(即由
git log --first-parent master报告的提交)。 - 每个源存储库中的文件都应该放在新存储库的子文件夹中(即A中的文件应该进入
A/,文件格式为B应进入B/)。 - 当在存储库 C(例如发布标签)中签出特定提交(包括在合并之前完成的提交)时,两个源存储库的兼容文件都应位于
A/和B/目录(至少在一两次提交中)。
到目前为止,我尝试了几种方法,包括this和git-stitch-repo,但均未成功(它们不满足上述要求)。
在这一点上,我已经设法:
- 使用 git filter-branch 将每个 repo 中的所有文件移动到子目录中。例如。对于回购 A:
- 使用git fast-export/fast-import将repo B导入A。
- 设备一种用于生成映射的方法,以便对于 A 中的给定 SHA,有一个应从 B 插入的零个、一个或多个 SHA:s 的列表强>。
我现在期望的是,git filter-branch 的一些巧妙用法应该使我能够将选定的提交从 B 插入到 A 的主分支中。但是怎么做呢?
【问题讨论】: