【问题标题】:What's the best practice to fork an open source project? [closed]分叉开源项目的最佳实践是什么? [关闭]
【发布时间】:2010-09-13 03:24:27
【问题描述】:

我需要定制一个开源项目。这些更改是针对特定组织的,对公共项目没有用处。代码更改包括禁用组织不需要的功能(影响 5% 的代码)、为组织定制其他功能(影响 20% 的代码)以及添加新的自定义功能(添加大约 10% 的新代码)。

我可以从当前版本开始并从那里进行自定义。但是,原始项目继续取得进展并引入了新功能,我希望能够在这些改进出现时将它们纳入其中。

管理此问题的最佳方法是什么?现在,我只能在发布版本可用时获得它们,但我应该很快就可以只读访问原始项目的 Subversion 存储库。我是使用 Subversion 存储库的新手,但也可以将它们用于我的代码。

【问题讨论】:

  • 这个主题很有趣blog post
  • 这是一个库还是一个开源应用程序?为什么不能向现有应用程序添加功能?

标签: svn version-control open-source branch


【解决方案1】:

最佳做法是首先尝试将您的更改合并到项目中。

如果这不是一个选项,你只是

  1. 导入他们当前的 HEAD,
  2. 在分支中进行修改
  3. 从他们的更新你的树
  4. 合并和重新分支

第 3 步和第 4 步与您的前叉保持最新相关。这是很多工作,取决于项目的活动和保持最新状态的重要性。如果非常重要,我会每周至少更新和合并一次。

您可能更喜欢将他们的 svn 树导入 git 以方便合并,这是您最常做的事情

【讨论】:

    【解决方案2】:

    最好的办法是不要分叉它。为什么不弄清楚如何改进它,这样它就会做你想做的事情,而不会失去任何现有的功能。如果代码大小是一个问题,也许你可以花一些时间来提高现有项目的效率。

    【讨论】:

    • 这是理想的选择,但是如果由于某种原因修复/改进没有像您希望的那样迅速被代码库接受怎么办?如果您正在从事一个不是管理员/所有者的项目,那么等待类似的东西有时与您的截止日期不符。我想知道这是否是OP的意思。
    【解决方案3】:

    我认为将您的东西放到上游是最安全的方式,因为您可以免费获得所有错误修复,并且上游所做的更改不会破坏您的东西,因为其他贡献者也必须尊重您的“功能”,因为他们是一等公民在项目中。如果这不是一个可行的选择,我会说git 它的颠覆桥是要走的路,因为它已经有很多对分叉有用的功能,无论如何这是在 git 中做事的自然方式一切都是不同 repo 的一个分支。

    【讨论】:

    • 绝对 - Git(或 Mercurial 或其他带有 Subversion 桥的 DVCS)对于跟踪上游存储库比 Subversion 本身更好。
    • 是的,一定要使用 git-svn 来克隆项目。然后你可以使用 git 强大的分支变基功能来保持你的更改是最新的。
    【解决方案4】:

    您与项目负责人谈过吗?您的更改是否具有普遍意义,还是非常适合您的需求?如果你不能在主项目中做你需要的工作,你当然可以分支他们的树,只要继续合并就行了。

    您也可以查看诸如 GIT 之类的功能(它可以与原始 svn 很好地交互)以接受部分合并/补丁。分歧越大,这个问题就越严重。当然,你可以使用 svn 和一个好的编辑器来做到这一点,但是使用更灵活的工具可能会让你的生活变得更轻松。

    【讨论】:

      【解决方案5】:

      这是 Visko 建议的变体,相反的假设是您将花费大部分时间进行自己的更改,并且只是偶尔集成原始源项目的新版本。 (使用下面的 Subversion 词汇。)

      1. 创建项目,将 original-source 作为主干提交。标记。

      2. 当您进行本地更改时,根据需要使用分支,合并 回到后备箱进行释放等。

      3. 当您想要集成原始源项目的新版本时:

        • 为其创建一个分支;
        • 通过分支文件加载(破解)源代码;
        • 将主干合并到分支中(因为这可能需要一些时间,而且您不想破坏主干);
        • 然后将分支合并回主干。标记。

      这就是我在脑海中设计的供我自己使用的过程。希望得到反馈。

      【讨论】:

        【解决方案6】:

        导入原始项目的 subversion-dump 并使用自己的存储库作为分支启动您的 fork - 随着原始项目的改进,您可以导入更改,然后调用“svn merge”来合并这些改进。只要您和原始项目不进行一些重组(重命名源文件、在目录之间移动等),合并应该主要工作。

        猜你喜欢
        • 2010-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-07
        • 2012-05-07
        • 1970-01-01
        相关资源
        最近更新 更多