在Git上管理类似项目

时间:2020-10-13 16:41:21

标签: git

我具有随着时间的推移而演变的结构。

我唯一的主要项目“土豆”

我们正在使用功能/分支等进行此项目,并且一切正常。

但是我们签订了一份大合同,我们同意按照他们的意愿进行一些更改。

现在POTATO在分支'BIG_CLIENT'上拥有东西,该东西只对该客户有用并且有意义

现在我们有

POTATO:master       -> for everyone
POTATO:BIG_CLIENT   -> for BIG_CLIENT

这个项目进行了一段时间,事情变得越来越混乱,从某种意义上说,事情可能会在分支之间交叉并在合并时中断。

有些东西只应该存在于它们各自的分支上,而绝不应该遍历, 两者都有存在。

例如:

我们要添加一个选项来订购薯条土豆,并且两者都应该相等。

如果我从'POTATO:master'创建分支'feature / fries'并在'POTATO:BIG_CLIENT'上合并,这将中断,因为BIG_CLIENT上不存在master上的内容将被拖到它上,反之-反之亦然。

我想不出办法来解决这个问题。

如果我分开存储库仍然存在,那么两个存储库中都必须有东西...。

我不知道我是否清楚,但让我展示一个代码示例(当然是一个非常愚蠢的示例,但请解释一下主意)。

分支机构主管:

icecream.iceCreamCreator(flavors, typeOfCone)

分支BIG_CLIENT:

if(canIsellIcecreamToThisCustomer){
    icecream.iceCreamCreator(flavors, typeOfCone, clientIsLactoseIntolerant, isTheSkyBlueToday)
    sendSpecialBigClientLogging(customer)
}

现在,我们将添加必须在两者上都存在的功能“ topping”。

每个人都应该成为

分支机构主管:

icecream.iceCreamCreator(flavors, typeOfCone, toppings)

分支BIG_CLIENT:

if(canIsellIcecreamToThisCustomer){
    icecream.iceCreamCreator(flavors, typeOfCone, toppings, clientIsLactoseIntolerant, isTheSkyBlueToday)
    sendSpecialBigClientLogging(customer)
}

如何管理类似的东西?

1 个答案:

答案 0 :(得分:1)

也许您不希望仅通过使用Git分支来发展本质上是2个单独的代码库。正如您已经看到的那样,这是不可扩展的,解决冲突比编写代码要花更多的时间,只是时间问题。

您可以做的是重构(恐怕会很大)您的代码库,以拆分库代码和应用程​​序代码。然后,您可以在自己的项目和客户的项目之间共享库代码。

任何特定于您应用程序的代码都会进入存储库#1。

任何特定于您的客户应用程序的代码都会进入存储库#2。

任何共享的更改/功能都将转到库代码(它本身是第3个Git存储库)。

那是解决它的一种方式。

相关问题