这是一个棘手的问题,但很多人都面临这个问题。我更喜欢使用Gitflow设置作为起点。
开发->正在使用
Master的新内容->需要测试生产的成品->已发布到生产中的东西。
在次要(较短)功能上,我从开发创建了一个分支,然后在那里进行工作,然后将该分支合并回开发。
在主要(长期)功能上,我从开发中创建一个分支,从该分支中创建较小的分支,然后合并回第一个分支。一旦主要功能完成,然后返回到开发分支。
我会定期(取决于项目)将开发合并回主版本,然后开始测试周期。如果测试中有任何修正,则在master分支(然后合并到sub分支)中完成。测试期间,开发可以在master分支上继续进行。
任何时候都应将master合并到开发中,并将开发合并到其任何长期子分支中。
主人应该总是(理论上)准备生产。理论上,开发应该始终准备好进行生产。唯一不同的原因是它为测试人员提供了一套可靠的功能来进行测试。
准备就绪后,已测试的master提交将合并到生产中,并从该分支进行生产中的部署。然后,可以在生产分支上进行紧急情况下需要执行的HOTFIX,而不必合并在master(可能有许多未经测试的更改)中。
我正常的树看起来像
LongTerm -> Development -> Master -> Production
LongTerm <- Development | |
| Development -> Master |
LongTerm <- Development -> Master |
Development <- Master |
Master -> Production
我的一般规则是,任何更改都不会花费超过几个小时的时间。如果确实如此,则需要进行较小的更改。如果它是一项巨大的功能(例如重写UI),那么它将长期持续下去,以便可以同时继续进行正常的开发。长期分支通常仅是本地分支,而开发,母版和生产是远程分支。任何子分支也仅是本地的。这可以使存储库对其他人保持干净,而不会失去git在长期功能集上的用处。
但是,我想指出的是,长期分支的存在是罕见的。通常,我所有的工作都在开发中。只有当我有一个功能(集合)要花很长时间以至于我也需要能够处理普通的开发人员时,才使用LongTerm分支。如果只是应该一起进行的一组更改,那么在完成所有操作之前,我不会合并来掌握。