git 工作流
# A successful Git branching model (opens new window)
# 解释
- master 分支
即主分支。任何项目都必须有个这个分支。对项目进行 tag 或发布版本等操作,都必须在该分支上进行。
- develop 分支
即开发分支,从 master 分支上检出。团队成员一般不会直接更改该分支,而是分别从该分支检出自己的 feature 分支,开发完成后将 feature 分支上的改动 merge 回 develop 分支。同时 release 分支由此分支检出。
- release 分支
即发布分支,从 develop 分支上检出。该分支用作发版前的测试,可进行简单的 bug 修复。如果 bug 修复比较复杂,可 merge 回 develop 分支后由其他分支进行 bug 修复。此分支测试完成后,需要同时 merge 到 master 和 develop 分支上。
- feature 分支
即功能分支,从 develop 分支上检出。团队成员中每个人都维护一个自己的 feature 分支,并进行开发工作,开发完成后将此分支 merge 回 develop 分支。此分支一般用来开发新功能或进行项目维护等。
- hotfix 分支
即补丁分支,由 develop 分支检出,用作 bug 修复,bug 修复完成需 merge 回 develop 分支,并将其删除。所以该分支属于临时性分支。 hotfix 分支,即热补丁分支。和 fix 分支的区别在于,该分支由 master 分支检出,进行线上版本的 bug 修复,修复完成后 merge 回 master 分支,并 merge 到 develop 分支上,merge 完成后也可以将其删除,也属于临时性分支。
# GitHub flow (opens new window)
GitHub 工作流是一个轻量级的、基于分支理论的工作流方法,它为团队和那些需要定期进行部署的工程项目提供支持。这个指南解释 GitHub 工作流的流程以及这样设计的原因。
# Create a branch(创建一个分支版本)
当你和他人一起开发一个工程项目的时候,脑海中会不定时跳出来一些新的想法或者与原来计划不太一样的开发思路,最终这些想法有些会行的通,有些行不通。版本分支帮你管理这个工作流。
当你在你的项目中创建了一个分支版本时候,你也就创造了一个尝试你的好想法的环境。在分支版本上对代码做出的修改不会影响到你的master
(主程序)分支,因此你可以自由的尝试修改和提交代码,直到与你合作的工程师决定根据你的修改修订主程序代码。
- 提示
版本分支是 Git 上的一个核心概念。整个 GitHub 工作流都基于此。
只有一条准则:在master
分支上的程序都可以被复制为多个分支程序。
缘于此,当你在开发一个新功能或者处理一个问题的时候从主程序中创建一个分支版本是非常重要的。你的分支版本名称最好起一个容易易懂、体现你修改内容的名称(例如:refactor-authentication
,user-content-cache-key
,make-retina-avatars
) ,这样别人才能够快速地知道你提交的是什么。
# Add commits (新增一个代码提交信息)
分支版本创建完成后就可以开始修改一些代码了。当你添加、编辑、或者删除一个文件的时候,系统会跟踪你的操作,并把你的操作同步到你当前的分支版本代码中。
后台程序会记录下你的修改过程,并公开这些修改,以便别人能够知道你修改了什么,进一步理解你为什么这样修改。你的每一次提交都会有一个关联的提交描述信息,记录着你为什么要修改这一块代码。此外,每个提交都被认作是一个独立的修改单元(不会影响到其他版本)。这样当你发现一个 bug 或者有不同的想法的时候可以回退。
- 提示
提交备注信息是很重要的,尤其是当你一旦把提交信息提交到服务器上,服务器上的 Git 系统会跟踪你的修改,并把它们展示给其他人。通过提交清晰的修改备注信息,别人会很容易明白你修改的内容并很快给出回复。
# Open a Pull Request (打开一个代码合并请求)
针对你的提交信息, Pull Request 会发起一个讨论。因为你提交的修改后的代码和备注说明会与 Git 代码库紧紧地结合起来,所以有人接受了你的 Pull Request 请求后,他们会看到你修改了什么,以及哪些需要合并到主程序中。
在开发的过程中你可以在任何一个地方打开一个 Pull Request:当你有修改很少一部分代码或者几乎没有提交什么代码,但想分享一些截屏或者想法的时候,当你思路卡住想寻求帮助或建议的时候,或者当你准备让别人回复评论你的工作的时候。通过 GitHub 的通知系统——@mention (在你 Pull Request 窗口中)你可以向特定人或者团队寻求回复。
- 提示
对于打开一个代码资源库,或者修改分享代码资源来说,Pull Requests 都非常有用。如果你在使用 Fork & Pull Model ,Pull Requests 会为你提供一个通知项目维护人员考虑你的修改的方式。如果你在使用 Shared Repository Model ,Pull Requests 会在代码合并到 master 中之前帮助你与他人进行关于要修改的代码的讨论。
# Discuss and review your code(讨论审核你的代码)
一旦你打开了一个 Pull Request,代码修订人员或团队会有很多问题和评论。也许代码风格不符合项目规定的格式,也许修改的代码没有单元测试,或者一切看起来都是如此的完美。Pull Request 的设计原则就是用来鼓励和引导这类讨论的。
你也可以小范围的讨论和反馈来推动整个流程的进度。如果有人评论你忘了一些事情或者代码中有 bug,你可以在你的分支中处理它并把结果提交到服务器上。GitHub 会在统一的 Pull Request 页面展示你最新提交的内容和别人最新的反馈信息。
- 提示
Pull Request 评论是用 Markdown 工具编辑的,因此你可以插入图片和表情图标,用格式化的文本进行编辑。
# Deploy(项目部署)
一旦你的 Pull Request 通过了审核,并且分支版本的代码也通过了你的测试,你就可以把你修改的代码放到生产上进行验证。如果修改的代码在生产上验证的时候有问题,你可以通过把上一个 master (上一个生产版本)重新部署到生产上以此来实现回退。
# Merge(项目代码合并)
如果你修改的代码在生产上已经通过了验证,那么现在就要把你修改的代码整合到 master 分支中(主分支中)。
一旦合并,Pull Request 会在你的代码中保存一个历史修改记录。因为这些都是可以被搜索到的,所以它可以是任何人随时查看和了解当初是如何决定修改的。
- 提示
通过向你的 Pull Request 中合并某些关键词,你可以把问题和代码关联起来。当你的 Pull Request 合并以后,那些关联的问题也会被关闭。例如:输入短语Closes #32
将会把代码库中 32 号问题关闭。要了解更多信息请查看帮助文档 (opens new window)。
# 总结
todo
# 改进
- 引入看板系统给问题安排优先级和跟踪进度
- 使用标签对 issues 进行分类
- 为 PR 配置自动化测试,参阅构建和测试 Python - GitHub Docs (opens new window)
更多参阅改进 GitHub 工作流的 15 个建议 - 简书 (opens new window)