我具有随着时间的推移而演变的结构。
我唯一的主要项目“土豆”
我们正在使用功能/分支等进行此项目,并且一切正常。
但是我们签订了一份大合同,我们同意按照他们的意愿进行一些更改。
现在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)
}
如何管理类似的东西?
答案 0 :(得分:1)
也许您不希望仅通过使用Git分支来发展本质上是2个单独的代码库。正如您已经看到的那样,这是不可扩展的,解决冲突比编写代码要花更多的时间,只是时间问题。
您可以做的是重构(恐怕会很大)您的代码库,以拆分库代码和应用程序代码。然后,您可以在自己的项目和客户的项目之间共享库代码。
任何特定于您应用程序的代码都会进入存储库#1。
任何特定于您的客户应用程序的代码都会进入存储库#2。
任何共享的更改/功能都将转到库代码(它本身是第3个Git存储库)。
那是解决它的一种方式。