Svn 什么';什么是开源项目的最佳实践?

Svn 什么';什么是开源项目的最佳实践?,svn,version-control,open-source,branch,Svn,Version Control,Open Source,Branch,我需要定制一个开源项目。这些更改是针对特定组织的,对公共项目没有用处。代码更改包括禁用组织不需要的功能(影响5%的代码)、为组织自定义其他功能(影响20%的代码)以及添加新的自定义功能(添加约10%的新代码) 我可以从当前版本开始,然后从那里进行自定义。然而,原来的项目继续取得进展,并引入新的功能,我希望能够纳入这些改进,因为他们来了 最好的管理方法是什么?现在,我只能在发布版本可用时获取它们,但我应该很快就能以只读方式访问原始项目的Subversion存储库。我不熟悉使用Subversion存

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

我可以从当前版本开始,然后从那里进行自定义。然而,原来的项目继续取得进展,并引入新的功能,我希望能够纳入这些改进,因为他们来了


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

最好不要使用它。为什么不想办法改进它,让它做你想让它做的事情,而不失去任何现有的功能呢。如果代码大小是一个问题,也许您可以花一些时间来改进现有项目的效率。

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

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

如果这不是一个选择,你只要

  • 输入他们现在的头
  • 在分支中进行修改
  • 从他们的树更新你的树
  • 合并和重新分支
  • 第3步和第4步与保持叉子电流相关。这是一项大量的工作,取决于项目的活动和保持最新状态的重要性。如果非常重要,我会每周至少更新和合并一次


    您可能更愿意将他们的svn树导入git,以便于合并,这是您将要做的最多的工作

    您与项目负责人谈过了吗?你的改变是一般意义上的,还是非常特定于你的需求?如果你不能将你需要的东西加入到主项目中,你当然可以将它们的树分支,只需在你前进的过程中不断地合并


    您也可以研究GIT之类的东西(可以与原始svn很好地交互)接受部分合并/补丁的功能。分歧越大,问题就越大。当然,你可以用svn和一个好的编辑器来做这件事,但如果使用更灵活的工具,你的生活可能会变得更轻松。

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

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

  • 创建项目,将原始源提交为主干。标签

  • 在进行本地更改时,根据需要使用分支,然后合并 放回后备箱等

  • 如果要集成原始源项目的新版本,请执行以下操作:

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

  • 这就是我在头脑中为自己设计的过程。当然,Git(或Mercurial或其他具有Subversion桥接器的DVCS)对于跟踪上游回购比Subversion本身要好得多。是的,无论如何都要使用Git svn来克隆项目。然后,您可以使用git强大的分支重基功能来保持更改的最新性。这个主题很有趣。这是一个库还是一个开源应用程序?为什么不能向现有应用程序中添加功能?这很理想,但是如果由于任何原因,修复/改进没有像您所希望的那样迅速地被代码库接受呢?如果你正在做一个你不是管理员/所有者的项目,等待这样的事情有时与你的截止日期不符。我不知道这是否就是OP的意思。