我们在GitHub上分叉了一个OSS项目,并为它添加了一些自定义扩展。我们希望将我们做出的一些更改发送回原始项目(错误修复等),但其他更改是原始项目维护者目前不感兴趣的功能扩展。我正在努力找出管理这种情况的最佳工作流程。
我希望我们的主分支包含(来自原始项目的提交)+(我们的贡献的错误修复)+(我们的自定义扩展)的总和。我想我们需要一个按功能分支的模型,以便我们可以将错误修复与自定义扩展分开。我们可以从我们的主分支启动自定义扩展分支,但我想我们也想要维护一个本地“origin”分支或者跟踪原始项目的东西,以便我们可以从那里启动没有被我们的污染的bugfix分支。定制的东西。或者其他什么。
任何人都可以建议构建这个工作流程的最佳方法,以便所有各种提交都去他们应该去的地方,没有人去他们不应该去的地方吗?
答案 0 :(得分:6)
听起来我已经回答了你自己的问题。创建一个名为“vanilla”的分支或跟踪上游主分支的东西,并有一个包含自定义扩展的“主”分支。为你做的每件事创建分支。对于错误修正,请从“香草”开始。对于你自己的东西,从主人开始。每隔一段时间,将香草合并为主人。要将错误修正带到您的自定义扩展分支中,您可以直接将它们的分支合并到主服务器中,或者只是等待上游接受您的错误修复请求,然后从vanilla到master的下一个合并将包含错误修正。这似乎是一个非常正常的工作流程。
答案 1 :(得分:1)
您要设置的是长期分叉,为此您已经确定解决方案可能是设置一个与原始“vanilla”项目链接的特殊分支并拥有一个主人分支,您可以在其中维护自定义工作副本。
你唯一需要记住的(从我的角度来看)是你想要同步变化时不应该合并两个分支,但在这种情况下(当分支发散时)有一个方便的Git Cherry-Pick命令,它允许你从一个分支中获取一个提交并将其应用到另一个,这在维护fork的情况下特别有用,因为您可以轻松地将单个提交从一个分支交换到另一个分支......