2017-10-01 69 views
1

我保持混帐一个Redis Sentinel library for Laravel有两个积极的发展分支:如何维护两个或更多不合并的分歧分支?

1.x ... o ———— o —————— o — o — o — o — o ... 
      ↘    ↑ ↑  ↖ 
2.x (breaking change) — o — o — o — o — o ... 

如上图所示,我分叉1.x的以适应从这个库集成框架的新版本重大更改,但我发现自己提交或手动复制分支之间的代码,以更新两个分支中的通用功能。

这似乎是因为他们各自包含的代码是不与其他兼容我永远不能合并这些分支机构。我可以采取哪些更好的工作流程来减少合并分支间常见更改所需的工作量?

回答

2

的老问题。分支或不分支。

真的是没有灵丹妙药这里。他们必须保持分歧的原因是什么?如果他们都不想再一起回归,由于类似新架构的实现,那么是否有理由不能将1.x迁移到2.x或在宣布的一段时间后完全弃用1.x等。 ?

这些通常必须做出艰难的抉择 - 弃用并停止支持,因为与不断合并相关的维护开销旧的或不同的变化,或者只是忍受它。只要意识到,如果你和它一起生活,你就会花费时间在那些本来可能花费在新功能上的开销。

分支保持发散,没有计划,以消除差异的时间越长,技术债务,你很可能有让你忙定期,并可能越来越大。

我意识到这不是一个解决方案,但我不知道其他选择 - 如果你打算在没有计划的情况下允许差异将来重新组合,那么将会有差异并且持续的维护将会是无论你想保持不变,都需要它。我不知道任何其他答案,但没有深入了解您的特定项目的细节。

+0

感谢您的中肯的意见。这是我担心的。 * 1.x *分支在今年年底不推荐使用,但我希望能够为未来学习一些技巧或工作流程。分支无法合并,因为它们都依赖于版本之间更改的外部代码(以及将每个分支约束到这些版本的程序包管理器元数据)。我会把这个开放一段时间,但我希望这是对这些情况可能的最佳答案。 –

+2

在外部依赖性差异的情况下,您可以实现一个接口还是使用其他方法来允许代码在编译时或在运行时选择外部库的哪个版本?这实际上是将它们合并到一起的一种手段 - 并且将以应该使更新更容易的方式分离每个版本的代码。但是,这可能并不值得,尤其是如果您在2017年底弃用1.x。 – LightCC

+0

我可以,而且我确实使用此方法处理项目需要支持的框架版本之间的轻微不兼容问题,但是,在这种情况下,这种差异足够大,我没有看到这样做的价值。太多的运行时条件(毕竟是PHP)会带来复杂性和开销,我认为我不能将这些代码强制到一个分支中。再次感谢您的时间 - 在阅读您的建议后,我对分叉的决定感到更好。我想我正在寻找那个神奇的子弹!你已经给了我一些关于未来项目的想法。 –

相关问题