我有两个项目(A和B)。 A使用C#,B使用Java。
两者都是独立的git历史。
是否可以将这两个独立的git存储库合并为一个?
最终结果是一个git存储库包含名为B的文件夹中名为A和B的文件夹中的项目A的历史记录。
谢谢!
答案 0 :(得分:0)
谷歌搜索后,下面的帖子准确地回答了问题:
http://nuclearsquid.com/writings/subtree-merging-and-you/
Subtree mergeging and you Oct 4,2008·3分钟阅读如果您正在使用 Git,你可能知道子模块。它们在你想要的时候很有用 将另一个Git存储库集成并跟踪到您自己的存储库中。但那里 还有其他两种选择。
第一个是简单地合并另一个存储库。这很好用 只要没有冲突的文件,但有可能存在 已经或将来都会有这个选择 是有用的。
这是子树合并策略的用武之地。它允许你 将另一个存储库(我们称之为“项目B”)合并到您自己的存储库中, 但进入自己的子目录。设置需要花费一些精力 一切都在第一次,但在那之后从另一个拉 存储库是更新所需的全部内容。
以下是您设置的方式。首先,您需要将Project B添加为远程:
$ git remote add -f projectb / path / to / other / repo(-f-Flag告诉 Git在添加后立即获取提交。
然后准备子树合并:
$ git merge -s ours --no-commit projectb / master这告诉Git 准备合并提交,但尚未实际提交。通过 指定'我们的'合并策略,我们告诉Git我们想要的 合并的结果是当前的HEAD,无论如何。
接下来,我们实际上将Project B添加到我们自己的存储库中:
$ git read-tree --prefix = vendor / projectb / -u projectb / master read-tree 将另一个存储库的主树读入索引,并且 将它存储在前缀中给出的路径下(在本例中为 供应商/项目B /)。请注意前缀的路径 选项必须以斜杠结尾,并且在执行时必须为空 这个命令。 -u-flag导致read-tree也更新我们的工作 使用新添加的文件进行复制。
现在剩下的就是提交我们的合并:
$ git commit -m“将项目B合并到vendor / projectb /”就是这样。 未来的更新只需要从项目B中提取子树 合并策略指定:
$ git pull -s subtree projectb master应该注意这一点 与使用子模块相比,策略也有一些缺点:
任何克隆您的仓库的人也会获得合并的存储库, 他们是否想要改变项目B 使用子模块时更容易另外,如果项目B中有人想要 将这些变化合并到自己的变化中,它会变得复杂。 这不是不可能的,但可能是需要的东西 先进的Git知识。在任何情况下,这样做也会连接你的 将项目历史记录到项目B,这可能是不可取的。
希望它有所帮助。
谢谢!