GitLab Flow 的 11 条规则

使用 Git 进行版本管理,是对 Git 之前所有方法的改进。然而,很多组织最终会出现凌乱的工作流程,或过于复杂的工作流程。这问题对于从另一版本控制系统转换过来的组织来说尤为突出。


本文中,我们为 GitLab 工作流程制定了11条规则,以帮助简化和清晰。规则的主要好处(或者说我们希望的好处)是它简化过程,并产生更加有效和更清晰的结果。


总是存在改善空间,一切均为草稿。一如既往,人人皆可贡献!非常欢迎提出反馈意见!



1. 使用功能分支,不直接提交(commit)到 master 分支。

如果你从 SVN 转过来,举例来说,你会习惯于基于主干(trunk)的工作流程。而使用 Git 时,任何正在进行的操作,都应为之创建一个分支(branch),以便最终在合并(merge)之前进行代码审查(code review)。



2. 测试所有的提交,而不仅仅只在 master 分支上。


有些人将 CI 系统设置为只测试合并到 master 分支的东西。这太迟了!总是拥有绿色的 master 测试(译者注:绿色在 CI 里通常意味着测试通过,而红色意味着测试失败),人们会觉得有信心。例如,在开始开发新功能之前,人们不得不测试 master 分支那是没有意义和荒谬的。CI 并不昂贵,所以这样做是最好的。



3. 在所有的提交上,运行所有的测试(如果你的测试时间长于 5 分钟则让它们并行)。


如果您正工作在一个功能分支并添加新提交(commit),请随之运行测试。如果测试需要很长时间,请尝试并行运行。合并请求(merge requests)时,在服务器端来执行此操作以运行完整的测试套件。如果你有一个用于开发的测试套件,而另一个测试套件你只为新版本运行;那么设置并行测试并运行全部测试套件是值得的。



4. 在合并到 master 之前执行代码审查,而不是事后审查。


不要在一周结束时测试一切。当场就搞!这样你更有可能抓住可能导致问题的东西,而其他人也会努力提出解决方案。



5. 部署是自动的,并基于分支或标签(tag)。


如果您不想每次都部署 master 分支,那么你可以创建一个 production 分支;但你没理由用脚本(script)或登录到某个地方手动操作。自动化一切,或以特定分支来触发生产部署



6. 标签(tag)是由用户设置的,而不是由 CI 创建。


应由用户来打标签(tag),并且基于此,CI 将执行一个动作。不应让 CI 去更改代码库。如果你需要非常详细的指标,你应该有一个服务器报告来详细说明新版本。



7. 发布(release)是基于标签(tag)的。


如果你打了 tag,则意味着创建了一个新版本。

8. 永远不对已推送的提交(pushed commits)进行变基(rebase)。


当你推送(push)到公共分支后,你就不该对其变基,因为这样会很难跟进你正在改进的内容,很难跟进测试结果是什么,而且它打破了 cherry-picking。有时我们在审查流程的后期要求代码贡献者合并及变基(git merge --squash),以使一些东西容易还原时,我们也会违背这一规则。但一般而言,准则是:代码应干净,修改历史应真实。



9. 每个人都从 master 分支开始工作,目标也是 master 分支。


这意味着没有任何长期分支。你可以检出 master 分支,构建功能,创建合并请求,并再次指向到 master 分支。在合并之前,应该进行完整的代码审查,而不应在代码审查和合并间存在任何中间阶段。



10. 在 master 分支中修正错误,其次再到发布分支。


如果你发现 bug,最糟的事莫过于你在刚发布的版本里修复了它,而未在 master 分支修复。为避免这种情况,应总是向前修复(fix forward)。在 master 中修复,然后 cherry-pick 到其他补丁发布分支。



11. 提交信息(commit message)应体现意图。


不仅要说明你做了什么,还应说明为什么这么做。如果解释一下为什么这么做,而不是用其他方式,这会更加有用。



更多内容请移步 GitLab Flow 文档


原文:https://about.gitlab.com/2016/07/27/the-11-rules-of-gitlab-flow/

译者:https://dianjia.io

时间: 2024-08-07 15:07:45

GitLab Flow 的 11 条规则的相关文章

浅析GitLab Flow的十一个规则

使用 Git 版本控制,是对使用它之前的所有版本控制方式的一种改进.然而,很多组织最终以太过混乱或过于复杂的流程来结束.这个问题对于刚从其他版本控制系统转过来的组织来说特别突出. 在本文中我们会列出 GitLab 工作流 的11条规则,以帮助简化.整理工作流程.这些规则最主要的益处是(或我们希望是) 它能够简化流程并且产生一个更高效和更清楚的成果. 我们认为总会有可改善的空间,并且每一次改善都是草案.一如既往,每个人都可以做出贡献!反馈和提意见是非常受欢迎的. 1. 使用功能分支,不直接提交到m

所有程序员都应该遵守的 11 条规则

  所有程序员都应该遵守的11 条规则   ************************************************************************** 英文原文:11 Rules All Programmers Should Live By 参与翻译(5人):北风其凉, pseudo, nzchris, 霍啸林, 无若 转载出处:http://www.oschina.net/translate/11-rules-all-programmers?from=

《C++编程规范:101条规则、准则与最佳实践》——第2章设计风格设计风格 C++编程规范:101条规则、准则与最佳实践 复杂性啊,愚人对你视而不见,实干家受你所累。 有些人避而远之。惟智者能够善加消除。 ——Alan Perlis 我知道,但是却又忘记了Hoare的至理名言:不成熟的优化是程

第2章设计风格 C++编程规范:101条规则.准则与最佳实践 复杂性啊,愚人对你视而不见,实干家受你所累. 有些人避而远之.惟智者能够善加消除. --Alan Perlis 我知道,但是却又忘记了Hoare的至理名言:不成熟的优化是程序设计中的万恶之源. --Donald Knuth[1] The Errors of TeX[Knuth89] 完全区分设计风格与编码风格是非常困难的.我们将一般在实际编写代码时才用得到的条款留到下一部分介绍. 本部分集中讨论适用面比一个特定的类或者函数更广的原则和

《Effective Ruby:改善Ruby程序的48条建议》一第11条:通过在模块中嵌入代码来创建命名空间

第11条:通过在模块中嵌入代码来创建命名空间 假设你正在做一个订购个性化笔记本(那种过时的纸质笔记本)的应用程序.客户能够在众多装订方式中选择,如使用金属钉针装订或使用传统的胶水装订.你决定创建一个类来表示装订类型,并将其他参数一同放在里面.然而很遗憾,事情并非计划的那样.下面的类定义有什么问题呢? 乍一看,似乎什么都是对的.这是没有语法错误的,但如果你在IRB中运行这个类,你会看到还真有点问题.当你执行这段代码来创建新的对象时,你会发现事实和预期不同.然而如果这段代码不是在定义一个类那它又做了

5 条规则教你远离手机综合症

不知大家有没有发现,如今一群朋友出来聚餐,寒暄几句后便埋头苦玩手机.更让人发指的是,KTV 里一展天籁,回过头竟发现三五好友盯着手机屏幕,挫败感刻骨铭心. 不只社交,智能手机对我的"摧残"已渗透到生活的方方面面.几乎每过半小时,就得掏出手机看看有无新通知.睡觉前,总要机械般刷一会社交网站.此外,也常常被毫无价值的通知分散注意力,无论是新闻推送.应用更新还是通讯信息. 难以想象没有智能手机的日子.分明厌恶但却无法抗拒. Phonearena 的编辑 Victor H 最近做了一个有趣的试

提高社交媒体营销效果的11条技巧

中介交易 SEO诊断 淘宝客 云主机 技术大厅 导语:调查显示,社交媒体的推荐将会为一个网站贡献30%的浏览量.文中这11条策略将有助于提高社交媒体营销效果. 本文作者:Firas Kittaneh,One Mall集团公司CEO,搜索引擎优化及电子商务专家 有效的社交媒体营销有助于成功企业的建立.最近,Shareaholic进行了一项研究,通过在4个月内对300,000家网站的追踪,结果显示,社交媒体的推荐将会为一个网站贡献30%的浏览量. 如果你的商业网站浏览量低于这个数值的话,你或许需要考

运维的85条规则_服务器其它

1.容量第一,优化第二--这条规则在故障发生时生效.在宕机的时候别研究什么优化,先恢复设备. 2.保留所有可以捕获的记录--以 PostgresQL 为例,包括有 WAL 文件,Slony 复制,快照技术,基于硬盘的 DB 版本(快照附带的) 3.不要因为优化引入更多问题.通常我们解决问题时做出来的东西都会转变成之后运维工作的负担.请确认为运维工作开发的那些工具已经完全交付使用.这些东西经常无法正常运行结果要返回开发组重来.更重要的,这种变更请求通常会打破团队原本安排好的工作计划. 4.保持简单

《C++编程规范:101条规则、准则与最佳实践》——2.6尽量减少全局和共享数据

2.6尽量减少全局和共享数据 摘要共享会导致冲突:避免共享数据,尤其是全局数据.共享数据会增加耦合度,从而降低可维护性,通常还会降低性能. 讨论这里的论述比第18条的具体讨论更加通用. 避免使用名字空间作用域中具有外部连接的数据或者作为静态类成员的数据.这些数据会使程序逻辑变得更加复杂,使程序不同的(而且可能更糟,距离较远的)部分耦合得更加紧密.共享数据对单元测试会产生不良影响,因为使用共享数据的代码片断的正确性不仅取决于数据变化的过程,更取决于以后会使用该数据的未知代码区域的机能. 全局名字空

开发者需掌握的11条技巧

 开发者需掌握的11条技巧-开发者选项设置技巧"> 现在程序开发者在应用程序上投入的精力丝毫不比实业创业者们少,但想要做好程序开发并不像想象中那么简单.这也是为什么有的程序具有操作性强.趣味性强.实用等明显优势,深受用户喜爱;而有的程序就仅仅如昙花一现,瞬间消失在用户的视野中. 为了探究如何能使应用程序让用户喜欢并且爱不释手,我们对话了一些年轻成功的程序开发者,针对"开发程序时最不容忽视的问题是什么"向他们提问,下面十一条是他们给出的最有建设性意见的建议.其中一些针对程