Git自定义功能的分支策略

时间:2014-10-14 20:45:58

标签: git version-control branching-and-merging

我想为我正在进行的项目寻求最佳Git分支策略的建议。

有一个开源程序(我称之为" PRIMARY")我想分叉并添加几个专门的功能(我将称之为修改后的版本" SPECIAL&#34)。这些功能(我称之为" FEATURE1"和#34; FEATURE2"可能通常不足以保证它们被添加到PRIMARY的主线开发中,但我想使FEATURE1或FEATURE2的更改可供任何需要它们的人使用.PRIMARY正在积极开发中,我希望保持SPECIAL最新的这些更改以及我的功能继续添加。

我的目标是创建一个易于使用的公共存储库

  1. 使用PRIMARY新版本的更改更新SPECIAL;
  2. 创建新版本的SPECIAL,其中添加了FEATURE1和FEATURE2;
  3. 隔离必要的更改以将FEATURE1或FEATURE2添加到任何版本的PRIMARY。
  4. 我一直在尝试各种策略,但我觉得我还没有找到最佳解决方案。我最初的想法是使用SPECIAL的主分支,供应商分支跟踪对PRIMARY的更改,从FEATURE1 / FEATURE2的供应商分支分支,然后将功能分支合并到主分支以生成最终的SPECIAL程序。但是如何处理PRIMARY的更新?我的尝试都需要在更新PRIMARY时手动对多个分支进行相同的更改(并解决冲突)。这对我来说似乎不对,而不是干。

    建议?

1 个答案:

答案 0 :(得分:0)

问题是如果你分叉,你将不得不自己维护原始项目(PRIMARY)的更新。这不是一个好习惯。想象一下,该项目越来越受欢迎(如果还没有),并获得了1000多名开发人员。你必须跟上他们所有的更新。

第一个选项是fork项目,实现FEATURE1,FEATURE2,然后让他们合并更改。由于您已声明:“... are probably not generally useful enough to warrant them being added to the mainline ...”此选项失败。

这让我想到了第二种选择。如果这些功能对主线没用,也许你不应该首先分叉。也许你应该有一个自己的小项目,它取决于开源项目,只包含2个功能的功能。把它想象成一个插入式广告。

但是,让我们说你想坚持自己的情景。在那种情况下,我肯定会有至少6个分支机构:

  • master - 发布我自己的分支
  • vendor - 跟踪原始项目的更新
  • development - 跟踪我的开发和原始项目的更新
  • feature1 - 暗示
  • feature2 - 暗示

featureX分支是不言自明的。在vendor分支中,原始项目的所有更改都将合并(辛勤工作)。 development分支是将vendorfeaturesX合并的分支。一旦代码正常运行,development分支应该合并到master,并且应该有一个新版本。

此外,vendor分支不必在原始项目中进行所有更改。您只能从发布分支更新vendor分支。

我认为这应该是关于如何进行分支的良好文档:http://nvie.com/posts/a-successful-git-branching-model/