像Git Flow这样的合并策略真的是一种反模式吗?


30

我的公司正在使用Git,并且正在使用一种特殊的分支方案-工作是在master中完成的,分支保留用于发布。只要在迭代中完成的所有工作都可以进入分支,就可以很好地工作,但是,如果出现关键的生产问题,我们必须确保将工作以某种方式进入两个分支。

最近,我们在那些分支机构中获得了一些“乐趣”。这一直是管理上的头疼事,要确保所有工作都进入每个分支,并且某个分支上已修复的一些错误只有在有人指出时才成为主要问题。

我前段时间遇到了Git Flow,我觉得这将解决我们的问题-代码不会一直渗透到发行版中,也不会渗透到整个发行版中。唯一的收获是我的领导说这种发展是一种反模式-疯狂发展了两个星期,然后花了三个星期来解决合并冲突。

我不确定自己是否同意,并且自提出以来,工作恢复正常了。直到最近,我们才有了一些重大的痛点。

我想知道-为什么将这种开发方案视为反模式? 真的反模式?


1
Ted Dziuba的旧博客文章中的“规则3”部分可能有助于说明它如何成为反模式。
Isxek

5
IMO,您花在考虑版本控制上的时间越长,首先整个用户->工具现象就越容易出错。
Erik Reppen

@ErikReppen:我想让每个人都放弃版本控制,并制定一个每个人都可以习惯的流程。这样,我们不必担心诸如是否为反模式之类的事情。
Makoto

6
@Makoto任何违反KISS的行为都是反模式,IMO。这就是VCS高级用户使我发疯的地方。
Erik Reppen

6
“反模式”一词有点像“最佳实践”,因为它通常是人们关闭大脑的借口。如果销售线索无法清楚地告诉您他对此有什么经验以及为什么不好,请不要接受这个想法。
Kyralessa

Answers:


30

他主要是指模型的要素分支。功能分支很久以前被宣布为反模式,当时分支持续了几个月,版本控制系统无法合并以挽救生命。持续一两周的功能分支的问题要少得多,尤其是在此期间您不断地 develop功能分支合并到此功能分支时。仍然建议不要超过此长度的任何内容。

即使您没有使用git flow的功能分支,其他部分也可用于确保您进行清晰的合并,并且将更改沿正确的方向传播。


3
我对功能分支或我们完成它们的方式的经验是,如果让它们生存超过一次迭代,它们可能会让人心痛。一条规则规定,所有功能必须在发布之前合并到迭代中,这样才能减轻合并的痛苦-伙计,如果我们在这些背后有一些严重的痛苦...
Makoto

6
我的经验是,只要您将本地内容与最近的master合并或适当开发,就可以在本地放置它们。
2013年

2
@JaHudec ...或直到周围有两件事以某种方式发生冲突。您应该始终对此有所了解……
johannes

5
做一些阅读后,Martin Fowler的参考似乎表明,在连续集成流程中完成的功能分支可以解决-如果以比大多数人认为要做的事情要小的方式来完成功能分支。因此,从某种意义上来说,您是对的-少于两周的生存时间才适合使用功能分支。但是,我看不到要素分支本身是如何反模式的。
Makoto

3
你是对的。当它们寿命太长而没有被合并时,它们只是一种反模式。有时,当人们不记得根本原因时,他们仍然会反对一个想法。
Karl Bielefeldt

21

合并是一件有趣的事情-合并的频率越低,难度越大,难度就越大,人们对其恐惧的程度就越大,他们执行的频率就越低。

解决方法是要么不允许分支偏离太多,要么不使用分支。

如果人们理解了这一点,那么合并可能就不会有太多问题,如果不是的话,可能是分支机构如果没有经过一定的培训就不是一个好主意。


1
不,不使用分支机构是入门者。另一个主要问题是,可以在同一代码中的两个不同位置完成工作,因此希望我们也可以做一些事情来减轻这种情况。
Makoto

12
@makoto,通常将代码中的事物解耦可以减少冲突的发生。它可以是将功能简单地分离为功能/类,也可以是更高层次的避免模块之间未记录的假设。然后,变化变得更加局部化。
maxim1000

1
@ maxim1000我同意。我认为有人曾经说过类似的话:“ VCS是模块化(解耦)架构的穷人的替代品”
8DH 13-10-22

+1为第一段。是的,如果没有教育,类似gitflow的局面将是死胡同
daitangio
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.