在Git上管理类似的项目

在Git上管理类似的项目,git,Git,我有这些随着时间而演变的结构 我的主要也是唯一的项目“土豆” 我们正在进行这个项目,使用功能/分支等,一切正常 但是我们签了一份大合同,我们同意按照他们的意愿改变一些事情 现在土豆在分支机构“大客户”上有了一些东西,这些东西只对该客户有效且有意义 所以在这一点上,我们有 POTATO:master -> for everyone POTATO:BIG_CLIENT -> for BIG_CLIENT 项目就这样进行了一段时间,事情变得越来越混乱,因为事情可能会在分支

我有这些随着时间而演变的结构

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

我们正在进行这个项目,使用功能/分支等,一切正常

但是我们签了一份大合同,我们同意按照他们的意愿改变一些事情

现在土豆在分支机构“大客户”上有了一些东西,这些东西只对该客户有效且有意义

所以在这一点上,我们有

POTATO:master       -> for everyone
POTATO:BIG_CLIENT   -> for BIG_CLIENT
项目就这样进行了一段时间,事情变得越来越混乱,因为事情可能会在分支之间交叉,合并时会中断

有些东西只应该存在于各自的分支上,永远不应该跨越, 这两者都有它必须存在的东西

例如:

我们将添加一个选项来订购薯条土豆,这两个选项应该相等

如果我从“POTATO:master”创建分支“feature/fries”,并在“POTATO:BIG_CLIENT”上合并,这将中断,因为在master上不应该存在于BIG_CLIENT上的东西将被拖到它,反之亦然

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

如果我将存储库分开,那么仍然会存在两个存储库上存在的东西的必要性

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

分行主管:

icecream.iceCreamCreator(口味、类型)
分行大客户:

if(向该客户销售冰淇淋){
冰激凌。冰激凌创造者(口味、可乐类型、ClientSlactoseintolerant、是不是今天的蓝色天空)
sendSpecialBigClientLogging(客户)
}
现在,我们将添加必须同时存在于两者上的功能“topping”

每个人都应该成为

分行主管:

icecream.iceCreamCreator(口味、可乐类型、配料)
分行大客户:

if(向该客户销售冰淇淋){
冰激凌。冰激凌创造者(口味、可乐类型、配料、ClientSlactoseintolerant、是今天的蓝色吗)
sendSpecialBigClientLogging(客户)
}

如何管理这样的东西?

您可能不想单独使用Git分支来发展本质上是两个独立的代码库。正如您已经看到的,这是不可伸缩的,解决冲突开始比编写代码花费更多时间只是时间问题

你可以做的是重构你的代码库(我担心这会很大),把库代码和应用程序代码分开。然后您可以在您和客户的项目之间共享库代码

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

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

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


这是解决问题的一种方法。

我的建议是,使用两个repo,不要使用git进行依赖关系管理。我还想补充一点,库代码应该由实际的依赖关系管理器(如npm)管理。是的,重构是在考虑之中的,但正如你所说,这将是一项大量的工作,我想代码库的主要部分是相等的,但在将来的某个时候,我们可能会被迫按照你的建议去做。但现在我想冲突和复制粘贴才是解决办法?@MateusSilva copy and paste听起来不太好。但最终还是你自己知道有多少人在项目中工作,有多少现有的冲突变更,计划的工作范围是什么,等等。这取决于你决定是采用黑客解决方案还是投资于重构。