如何最佳实践地fork一个开源项目?

9
我需要定制一个开源项目。这些更改是为了特定的组织,不会对公共项目有用。代码更改包括禁用组织不需要的功能(影响5%的代码),为组织定制其他功能(影响20%的代码)以及添加新的自定义功能(添加约10%的新代码)。
我可以从当前版本开始进行定制。然而,原始项目继续进行改进并引入新功能,我希望能够随着它们的出现来整合这些改进。
最好的管理方式是什么?目前,我只能在发布版本可用时获得它们,但我很快就应该可以读取原始项目的Subversion存储库。我是Subversion存储库的新手,但我也可以将其用于我的代码。

这是一个关于该主题的有趣博客文章 - JC.
这是一个库还是开源应用程序?为什么不能向现有应用程序添加功能? - David Nehme
6个回答

8
最佳实践是先尝试将您的更改合并到项目中。
如果这不是一个选项,您可以:
1. 导入他们当前的HEAD, 2. 在分支中进行修改, 3. 从他们那里更新您的树, 4. 合并和重新分支。
步骤3和4与保持您的fork当前相关。根据项目的活动和保持当前的重要性,这是很多工作量的。如果非常重要,我会每周至少更新和合并一次。
您可能更喜欢将他们的svn树导入git,使合并变得容易,这也是您最常做的事情。

7

最好的做法不是分叉它。为什么不想办法改进它,使其能够按照你的要求执行而不失去任何现有功能。如果代码大小是一个问题,也许你可以花一些时间来提高现有项目的效率,而不是分叉它。


2
这很理想,但如果由于某种原因修复/改进不能被迅速地合并到代码库中,该怎么办?如果你在一个你不是管理员/所有者的项目上工作,等待这样的事情有时与你所拥有的截止日期不一致。我想这就是原帖作者的意思。 - alph486

3

我认为将你的东西提交到上游是最安全的方式,因为你可以免费获得所有错误修复,并且上游所做的更改不会破坏你的东西,因为其他贡献者必须尊重你的“特性”,因为他们在项目中是一等公民。如果这不是可行的选择,我建议使用git及其子版本桥接,因为它已经具有很多对分叉有用的功能,而在git中,一切都是不同存储库的分叉。


1
绝对没错 - Git(或Mercurial或另一种带有Subversion桥接的分布式版本控制系统)是跟踪上游存储库比Subversion本身更好的选择。 - Nicholas Riley
当然可以使用git-svn来克隆项目。然后,您可以使用git强大的分支rebase功能来保持您的更改最新。 - hlovdal

1

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

  1. 创建项目,将原始源代码提交为主干。打标签。

  2. 根据需要使用分支进行本地更改,合并到主干进行发布等。

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

    • 为其创建一个分支;
    • 在分支文件上加载(hack)源代码;
    • 将主干合并到分支中(因为可能需要一些时间,您不想破坏自己的主干);
    • 然后将分支合并回主干。打标签。

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


1

你和项目负责人谈过了吗?你的更改是否有普遍意义,还是只是为了满足你的需求?如果你无法将所需内容融入主要项目中,你可以分支他们的树,随时合并。

你也可以了解一下类似GIT的工具的功能(它可以很好地与原始svn交互),以接受部分合并/补丁。你分支得越多,这个问题就会越大。当然,你也可以使用svn和一个好的编辑器来完成,但使用更灵活的工具可能会让你的生活更轻松。


0

导入原始项目的 Subversion 转储文件,并使用自己的代码库作为分支启动您的 fork - 当原始项目得到改进时,您可以导入这些更改然后调用 'svn 合并' 以合并这些改进。只要您和原始项目不进行一些重构(例如重命名源文件、在目录之间移动等),合并应该基本上可以工作。


https://medium.com/@abeer.youssef/how-to-use-your-forked-open-source-project-in-your-colab-notebook-without-need-to-wait-for-merge-337b4188d544?sk=656a4079e11493c72fe70b9b586c0c3b - dodo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接