Git合并两个独立的存储库,完全不同的项目

时间:2015-10-15 02:39:41

标签: git

我有两个项目(A和B)。 A使用C#,B使用Java。

两者都是独立的git历史。

是否可以将这两个独立的git存储库合并为一个?

最终结果是一个git存储库包含名为B的文件夹中名为A和B的文件夹中的项目A的历史记录。

谢谢!

1 个答案:

答案 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,这可能是不可取的。

希望它有所帮助。

谢谢!