分叉开源项目的最佳做法是什么?

时间:2008-09-25 15:42:13

标签: svn version-control open-source branch

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

我可以从当前版本开始并从那里进行自定义。然而,原始项目继续取得进展并引入新功能,我希望能够将这些改进纳入其中。

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

6 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:8)

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

如果那不是一个选项,那么

  1. 导入他们当前的HEAD,
  2. 在分支机构中进行修改
  3. 从他们的
  4. 更新您的树
  5. 合并和重新分配
  6. 步骤3和4与保持叉子电流相关。这是一项很多工作,取决于项目的活动和保持最新的重要性。如果非常重要,我每周至少更新一次并合并一次。

    你可能更喜欢将他们的svn树导入git以简化合并,这就是你将要做的最多

答案 2 :(得分:3)

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

答案 3 :(得分:1)

您是否与项目负责人交谈过?您的更改是否具有普遍意义,还是非常符合您的需求?如果你无法在主项目中运行你需要的东西,你当然可以分支他们的树,只需保持合并就行。

您可以查看GIT之类的功能(可以与原始svn进行交互,以便接受部分合并/补丁)。你越分散,这就越成问题。你可以用svn和一个好的编辑器来做到这一点,但是使用更灵活的工具可以让你的生活更轻松。

答案 4 :(得分:1)

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

  1. 创建项目,将original-source提交为trunk。标签

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

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

    • 为它做一个分支;
    • 在分支文件上加载(hack)源;
    • 将trunk合并到分支中(因为它可能需要一些时间,而且你不想破坏你的主干);
    • 然后将分支合并回主干。标签
  4. 这就是我在脑海中为自己设计的过程。会喜欢它的反馈。

答案 5 :(得分:0)

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