2012-08-08 49 views
0

我正在使用一个由一个主宝石(我们称之为SuperGem)和几个它所依赖的小宝石组成的ruby项目。该项目在Github上,我分叉它并维护我自己的版本(称为SuperGemFork)。当SuperGem更新时,我只需要拉和合并新代码,然后更新SuperGemFork上的版本号。维护分叉宝石和分叉依赖项

现在就是这种情况。我也想制作我自己的一个版本的依赖项(我们称之为SmallGem)。所以现在我想要SuperGemFork依靠SmallGemFork而不是SmallGem。因此,当SuperGem和SmallGem都更新时,我现在必须将两个gem中的代码合并到我的叉中,更新版本号并更改SuperGemFork中的依赖关系以依赖SmallGemFork的新版本。

我的问题是不得不改变SuperGemFork中的依赖关系。当SuperGem(原始版本)更新时,它现在取决于新版本的SmallGem。但是,如果我从两个gem中提取并合并代码,但忘记更新依赖项,则即使存在新版本,SuperGemFork仍依赖于SmallGemFork的旧版本。不得不改变依赖关系是多余的并且容易出错,并且我想至少在我运行bundle install时发生某些失败,或者如果我忘记这样做,则启动应用程序。

那么,有没有一种很好的方式可以让我轻松地维护自己的分支之间的依赖关系?

谢谢, 亚历克斯

回答

0

如果有可能的猴子修补原来的宝石,而不是重写源代码,我会走那条路。这是Ruby的强项之一。

然后,他们可以更改他们的代码,并且不会像源代码那样紧密地耦合到源代码的物理布局,因为您将实际的逻辑和它们创建的对象。

+0

的确如此,如果我通过monkey-patching重写我的gem版本中的某个函数,但我只想对该函数进行一些小修改,那么我基本上必须将原始代码复制并粘贴到我的宝石。然后,当原始宝石中的功能发生变化时,没有简单的方法来检测并将更改合并到我的版本中。我非常喜欢猴子修补的想法,因为它使得依赖关系更加清洁,但它似乎会使开发变得更加困难。你怎么看? – alexsanford1 2012-08-09 01:16:16

+0

根据我的经验,当你使用猴子补丁的时候有一些代码重叠,但是它比分支整个宝石要少很多。我认为利用Ruby的覆盖方法的能力有所帮助。这不是一个容易的任务,但你有一些前途。 – 2012-08-09 07:29:40

+0

感谢您的帮助!它看起来没有其他答案,所以我会接受这个答案。它看起来像是分叉或是猴子修补,每种都有优点和缺点。 – alexsanford1 2012-08-15 11:46:01