如果您只有SVN分支,是否应该打扰一下?


10

如果我们仅在Subversion中使用一个分支,我们是否还要打扰?我们不能只在行李箱上工作以加快速度吗?

这就是我们使用Subversion开发的方式:

  • 有一个行李箱
  • 我们建立了一个新的发展分支
  • 我们在该分支上开发了一项新功能
  • 完成功能后,将其合并到主干中,删除分支,并从主干中创建新的开发分支

当我们要发布到生产环境时,我们会在行李箱中制作一个标签。错误修正是在该标签的分支上进行的。然后,此错误修正将合并到主干中。

这就是为什么在功能完成后我们创建了一个新的开发分支的原因。这样,错误修正会尽快包含在我们的新代码中。

下图应阐明:

我们的颠覆策略

现在,感觉这不是最有效的工作方式。我们在提交之前在本地进行构建,这大约需要5-10分钟。您可以理解,等待时间很长。

开发分支的想法是主干始终可以发布。但这在我们的情况下已不再是真的。有时,一项功能几乎已经准备就绪,并且一些开发人员已经开始编写下一个功能(否则,他们将围坐在一个或两个开发人员完成并合并的位置)。

然后,功能部件1完成后,将其合并到主干中,但包含功能部件2的某些提交。

那么,由于我们只有一个分支,我们是否应该还要烦扰开发分支?我一直在阅读有关基于主干的开发和逐个分支的信息,但是我发现大多数文章都集中在逐个分支的部分。我的印象是,重大变化将涉及多个版本。这不是我们遇到的问题。

你怎么看?我们可以在行李箱上工作吗?最坏的情况是(我认为),我们将不得不在主干中做一个标签,并挑选需要的提交,因为某些提交/功能尚未准备好投入生产。


1
我认为如果您拥有多个分支机构会更好。每个功能一个。这样,如果您确实开始处理需要花费一些时间的大型功能,则不会保留已发布版本的错误修复等。
艾米·阿努谢夫斯基

每个功能的分支似乎会使它更加复杂,而我们正在努力降低复杂性。另外,如果有错误修正(例如,针对1.0),则可以在由标记组成的分支上进行修正。然后,我们可以标记该分支(创建1.1),将其释放,然后将错误修正合并到主干中。大型功能的开发将继续进行。
彼得

Answers:


6

如果您可以以较小的增量提交,并且已经进行了适当的集成,那么IMHO直接在主干上工作就可以了,因此您可以(在合理的范围内)确保提交不会破坏现有功能。我们在当前项目中也这样做(事实上,我默认情况下没有在任何使用特定于任务的分支的项目中工作)。

我们仅在发布前创建分支,或者仅在某个功能需要很长时间才能实现(即跨越多个迭代/发布)时才创建分支。任务的粗略大小几乎总是可以估算得足够好,以便我们提前知道是否需要单独的分支。我们还知道下一个版本(我们大约每2个月发布一次)之前还剩下多少时间,因此很容易看出任务是否适合下一个版本之前的可用时间。如果有疑问,我们可以将其推迟到创建release分支为止,然后可以在主干上开始工作了。到目前为止,我们只需要创建一个特定于任务的分支(大约3年)。当然,您的项目可能会有所不同。


1
我和彼得在一起。我们为每个受支持的发行版都有一个分支,但否则可以在中继中工作。我们还使用了持续集成,但是请注意,这仅意味着它将可以编译,并且即使在进行单元测试时也不会破坏现有功能。
伊恩

@Ian,当然,没有任何测试可以确保现实生活中的代码100%无错误……资源有限,我们的目标是达到合理的安全水平(其定义是针对特定领域和特定项目的)。还请注意,CI也可以运行集成等测试,而不仅仅是单元测试。
彼得Török

这一直有效,直到失败。如果您需要在新功能准备就绪之前实施修补程序...或者,如果新功能版本尚未准备就绪,如您认为的那样,如果您不使用分支,则很难将更改撤出代码。
SoylentGray 2011年

@Chad,最新发行版的补丁程序在相应的发行版分支上完成,而不受干线的干扰。我们还对新功能进行了广泛的测试,因此我们知道什么时候可以准备就绪。当然,我们项目中的主要功能相对较少。并且由于它是服务器端Web应用程序,因此即使添加DB标志来有选择地打开/关闭功能,也相当容易。YMMV。
彼得Török

大声笑,好吧,我误解了,以为您只是拥有了主干(一个例外),我也使用了这种方法,对一小群人和频繁的小发行版也很好,它对于我们定期(3-6个月)大发行不起作用)间隔。
SoylentGray 2011年

1

功能开发所描述的是并行开发(针对不同产品版本的同时开发),并且确实需要分支机构才能正确处理。如果您经常不得不重新组合构成特定发行版的功能,则每个发行版或每个功能都可以有一个分支。

执行此操作的另一种方法是,默认情况下不使用主干,但是如果您希望任务扩展到下一个发行版,则创建一个分支。您总是标记发布的课程。

哪种方法真正取决于您可以预先进行多少管理。如果典型的发行版实际上没有并行开发,那么我将采用第二种方法。


我同意,OP对此进行了确认:“有时候,一项功能几乎已经准备就绪,有些开发人员已经开始编写下一个功能……”
Chris

是的,但是我们不必重新构造。功能按时间顺序实施,例如,功能1-4必须都在下一个版本中(例如1.0)。唯一有问题的时间是功能5的开发已经开始,该功能是针对功能5之后的版本的。然后,我们必须确保在标签/发行版(1.0)中不进行这些更改。在发布之前创建分支确实可以解决该问题。
彼得
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.