我想为我正在进行的项目寻求最佳Git分支策略的建议。
有一个开源程序(我称之为" PRIMARY")我想分叉并添加几个专门的功能(我将称之为修改后的版本" SPECIAL&#34)。这些功能(我称之为" FEATURE1"和#34; FEATURE2"可能通常不足以保证它们被添加到PRIMARY的主线开发中,但我想使FEATURE1或FEATURE2的更改可供任何需要它们的人使用.PRIMARY正在积极开发中,我希望保持SPECIAL最新的这些更改以及我的功能继续添加。
我的目标是创建一个易于使用的公共存储库
我一直在尝试各种策略,但我觉得我还没有找到最佳解决方案。我最初的想法是使用SPECIAL的主分支,供应商分支跟踪对PRIMARY的更改,从FEATURE1 / FEATURE2的供应商分支分支,然后将功能分支合并到主分支以生成最终的SPECIAL程序。但是如何处理PRIMARY的更新?我的尝试都需要在更新PRIMARY时手动对多个分支进行相同的更改(并解决冲突)。这对我来说似乎不对,而不是干。
建议?
答案 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
分支是将vendor
和featuresX
合并的分支。一旦代码正常运行,development
分支应该合并到master
,并且应该有一个新版本。
此外,vendor
分支不必在原始项目中进行所有更改。您只能从发布分支更新vendor
分支。
我认为这应该是关于如何进行分支的良好文档:http://nvie.com/posts/a-successful-git-branching-model/