2016-02-03 49 views
0

我读过各种混帐教程,但仍然有一些关于如何使用git存储库&分支机构的问题。寻求建议如何构建混帐存储库/分支

这里的情况,我有:

我有一个由外部合作伙伴保持着,我也得到源代码中的代码库“A”更新每隔几个月吧。基于代码库“A”,我建立了另一个产品“B”,这是我的核心产品。然后,我使用产品B作为我的客户的基础。每个客户都有自己的小调整。因此,我为每个客户维护单独的代码库。视觉上看起来是这样的:

 A 
    | 
    B 
// \ \  
C D F G 

现在的问题:)上的代码库“A”发生每一次变化或“B”,我有一个艰巨的任务全部修改合并到其他的代码库。我正在寻找一种如何利用Git来缓解这段代码合并任务的方法。

通过阅读教程,我学到了很多东西。但是,我仍然有一个关于我的存储库/分支结构应该如何的基本问题。这里是我的问题:

  • 我是否需要为每个代码库存储库?
    • 如果是的话,我可以如何在不同的存储库之间执行代码合并?
  • 我应该为每个代码库有多个分支的仓库吗?

    • 什么应该是我的主分支? A还是B?
    • 合并应该如何进行?通过使用rebase
    • 分支存储在单独的文件夹?
  • 是否有解决问题的另一种(更好的)方法?

任何帮助将是伟大的! 谢谢

回答

0

这并不清楚A和B之间的切口是多么干净。您可以决定将其全部放入一个存储库中,并将这些目录分开,或者将它们放在单独的存储库中,并可能使A成为B的子模块。这取决于你如何接收这些更新。

至于分支;您可以为B的每个变体都有一个分支,然后每当您更新B时其他代码库也应该有,只需将git merge B合并到其他分支中即可。由于您似乎在为每个代码库修改B(而不是扩展它),因此将B作为子模块不适用于此。

对于分支机构的单独文件夹:不,不直接。当您查看一个分支时,其他代码在您的工作目录中不可用。您必须签出另一个分支才能切换到另一个代码库,从而更改工作目录的内容。但是,如果您发现自己切换很多,您可以设置multiple working trees。虽然这是一个实验性功能,并且在使用子模块时也有一些错误。您也可以考虑简单地维护同一个存储库的多个实例,接受开销。或者在需要时切换分支。

+0

A和B之间没有干净的分界线。我可以在所有分支中使用不同内容的文件“foo.txt”。例如: 在** A ** foo.txt是''boo''; on ** B **''boo with B“'; on ** C ** - '“嘘与B & C"'; 在** D ** - '”嘘与B&D“' – Gintautas

+0

正确的,子模块的想法不适用于此。这听起来像6分支,并合并在一个方向上(即,当A更新时,将其合并到B中,然后将B合并到C/D/E/F中) – Joost