【问题标题】:Maintaining a forked gem and forked dependencies维护分叉的 gem 和分叉的依赖项
【发布时间】:2012-08-05 17:39:32
【问题描述】:

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

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

我遇到的问题是必须更改 SuperGemFork 中的依赖项。当 SuperGem(原版)更新时,它现在依赖于 SmallGem 的新版本。但是,如果我从两个 gem 中提取并合并代码,然后忘记更新依赖项,则 SuperGemFork 仍然依赖于 SmallGemFork 的旧版本,即使有新版本可用。必须更改依赖项是多余且容易出错的,我希望至少在我运行 bundle install 或启动应用程序时会失败。

那么,有没有一种好方法可以让我轻松维护自己的 gem 分支,这些分支之间存在依赖关系?

谢谢, 亚历克斯

【问题讨论】:

    标签: ruby gem dependencies fork bundler


    【解决方案1】:

    如果可以对原始 gem 进行猴子补丁,而不是重写源代码,我会这样做。这是 Ruby 的强项之一。

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

    【讨论】:

    • 是的,虽然如果我通过猴子补丁覆盖我的 gem 版本中的一个函数,但我只想对函数做一个小的改动,那么我基本上必须复制并粘贴从原始代码到我的宝石。然后,当原始 gem 中的函数发生更改时,没有简单的方法可以检测到并将更改合并到我的版本中。我也很喜欢猴子补丁的想法,因为它使依赖关系更加清晰,但似乎它会使开发更加困难。你怎么看?
    • 根据我的经验,monkey-patch 时会有一些代码重叠,但它比 fork 整个 gem 要少得多。我认为利用 Ruby 覆盖方法的能力会有所帮助。无论哪种方式,这都不是一件容易的事,但你已经领先了一些。
    • 感谢您的帮助!看起来没有其他答案,所以我会接受这个。看起来要么是分叉,要么是猴子补丁,各有利弊。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-29
    • 2010-12-07
    • 2014-10-13
    • 2019-05-03
    • 2021-07-18
    • 2015-06-27
    • 1970-01-01
    相关资源
    最近更新 更多