如果您正在使用 git,那么即使它们已经死了,拥有多个分支也会很有用。您可以跟踪在哪个产品版本中引入了错误(按版本一分为二),您可以为许多小团队组织您的工作。您可以通过查看死树枝来了解为什么有些想法无法实现。
关键是一致性。尝试对分支进行分组以适应您的工作流程。例如,您可以拥有
stable
- CI 从这个构建生产和/或登台
staging
- 从这个 CI 构建分期
feature/*
- 功能分支
hotfix/*
- 从 staging/stable 分支开始,用于修补程序
experimental/*
- 用于可能无法产生干净和可维护的代码或可能中途放弃的研发功能
这里有一些基本提示:http:
//nvie.com/posts/a-successful-git-branching-model/
此外,如果您希望您的团队快速开始使用良好的分支结构,请尝试使用 git flow:http: //jeffkreftmeijer.com/2010/why-arent-you-using-git-flow/
关于重构其他同事糟糕的代码。您可以使用一些refactor/*
分支,这样您就可以通过在单独的分支上进行原子合并/变基来轻松查看损坏的内容。当然,测试是非常有用的,但是如果你不简单地git bisect
告诉你是谁和什么时候引入了一个错误(如果你写一个测试来检查这个错误,那么你现在有一个有意义的测试可以添加到你的测试套件)。
底线是:不要害怕有很多分支,只要让它们井井有条。大多数情况下,合并并不像人们所说的那么复杂,您可以随时撤消它们(如果您不使用持续交付模型,则可以推迟到下一个版本)。
编辑:something/*
我的意思是有多个具有共同something/
前缀的分支,从而模仿目录结构。
EDIT2:在 SVN-likes 上情况有所不同,分支和合并并不便宜。谨慎行事;)
EDIT3:考虑为不同的模块使用不同的(子)存储库。它可能会简化开发。模块开发者只关心主应用的最新稳定版本,分支模型只面向一个模块。
EDIT4:问:“您是否可以考虑将一些数字或公式置于阈值之下,在该阈值之下可以接受凌乱的分支,而在该阈值之上可以更好地组织分支?”
当然!
公式(以我的拙见)很简单。
- 在本地拥有尽可能多的“脏”分支(只是不要将它们推送给其他人或共享存储库)
- 尽量不要推送脏分支,除非它们对其他开发人员有一定的价值。如果您已经在共享存储库中拥有它们,请保留它们并重命名它们(
legacy/*
或者简单dirty/*
地想到)。
将它们视为文件结构。您可以拥有许多不再需要的旧文件,但如果您以有组织的方式保存它们,您可以轻松地将存档与您的工作集分开。
看到你喜欢的数字,你可能想要这些分支的真实世界用例
让我举一个我一直在做的中小型 Symfony2 PHP 项目的例子。
如果您有一个项目持续 6-9 个月,由 5 名开发人员以敏捷(scrum)方式积极开发,每两周进行一次客户端演示,您可能希望拥有分支:
- 每个用户故事(在紧密集成的用户故事上,这可能是个坏主意),总共大约 50 个分支,将它们视为功能分支
- 每个开发人员(根据需要,如果开发人员需要一段时间的工作),他们来来去去,但通常开发人员在这类项目中少于 3 个。他们中的一些人根本不使用公共开发人员分支,而是将脏分支留给自己
- 实验(用于研究目的的无限数量的分支,例如模块中使用的不同算法或库),据我记得大约 7 个分支
- 每个 sprint(从用户故事合并,有助于演示),大约 10 个,这些是我们在初始开发期间的暂存/稳定。为什么不用标签?标签也是,但分支,因为它更容易应用修补程序。
- 修补程序(通常是短暂的,为了便于挑选而隔离),3 个顶部 ;)
- 杂项(通常是正在进行的系统范围的功能和/或 2-3 人的团队分支),大约 10
如您所见,这里也没有确切的数字。我已经完成了几个这种规模的项目,其中大多数都有大约 70-80 个分支(20-30 个没有用户故事分支)。如果它们以一种合乎逻辑、简洁的方式组织起来,那么代码存储库就很容易浏览。
使用 git 还可以考虑使用 rebase 而不是合并,这样您就不会出现合并气泡(查看这篇文章http://stevenharman.net/git-pull-with-automatic-rebase)。