GitHub Flow 是一种轻量的,基于分支的工作流程。这种工作流程被用来支持有定期部署需求的团队和项目。这个指南用来说明为什么要使用 GitHub Flow 方法,以及怎样使用。
创建一个分支
当你在一个项目中工作时,你可能会冒出很多关于新功能和新特性的想法。其中一些想法可能尝试之后有效,另一些就放弃了。分支就是用来帮助你管理这种工作过程的。
当你在你的项目中创建一个分支时,也就意味着你创建了一个能够尝试这些新想法的环境。你在这个分支上进行的各种修改都不会影响到 master
分支,所以你可以随意进行实验和提交这些修改。直到你的协作者准备审查你的分支代码之前,这个分支都不会被合并。
进一步的提示
分支是 Git 里的一个核心概念,整个 Github Flow 都是建立在这个概念上的。唯一的原则是:master
分支上的任何代码都一直应该是可以直接部署的。
非常重要的一点:你创建新分支是为了实现新功能或者修复 BUG,所以你的分支名称应该有一定描述性(比如 refactor-authentication
, user-content-cache-key
, make-retina-avatars
),这样其他人就能一眼看出来它的目的。
添加 Commits
一旦你创建了你的分支,就可以开始修改代码了。不论你是增加,修改还是删除文件,你都会提交一个 Commit, 然后把它添加到你的分支。添加这些 Commits 的过程同时也保证了你在这个分支上的工作能够被跟踪。
Commits 同时也创建了公开透明的历史记录,其他人可以通过这个历史记录了解到你做了什么以及为什么要做。每个 Commit 都包括一个相关的提交信息,这些信息说明了为什么要进行对应的特定修改。此外,每个 Commit 都可以被认为是一个独立的更改单元。当你发现 BUG ,或者你想尝试不同的方向时,你可以回滚之前的更改。
进一步的提示
提交信息是很重要的,特别是当你把 Commits push 到服务器之后,所有更改都会以这些提交信息来显示。把提交信息写得更清楚,其他人就会更容易跟踪变化以及进行反馈。
进行一次 Pull Request
Pull Request 意味着启动了关于你的 Commits 提交的讨论。因为他们是和 Git 版本库紧密集成的,所以如果任何人接受了你的 Pull Request,他都可以精确的看到哪些修改会被合并
你可以在开发过程中的任何时间点进行 Pull Request: 当你只写了很少代码,或者根本没写代码,但是希望分享一些截图或概念时;当你有疑难,需要他人的帮助或建议时;当你准备好让其他人审查你的工作时,都可以进行。你可以在你的 Pull Request 信息里使用 Github 提供的 @mention 功能来向特定的人或小组进行询问,无论他们就在旁边或者是远程工作。
进一步的提示
Pull Request 对于开源项目的贡献过程以及对于多人共享版本库的管理来说都是很有用的。如果你使用 Fork 和 Pull 的工作模式,Pull Requests 提供了一种通知的方式,告知项目维护者关于你希望他们考虑的一些修改。如果你使用共享版本库的工作模式,Pull Requests 可以帮助你在把你的修改合并到 master 分支之前,发起代码审查和讨论。
讨论和审查你的代码
一旦发起了一个 Pull Request 请求,其他审查你的修改的人或小组就会提出一些问题或写一些评论。例如编码风格不符合项目规范,没有单元测试覆盖,或者一切正常,等等。Pull Requests 的设计目的就是用来鼓励和捕捉这种形式的沟通的。
在关于你的 commits 的适当的讨论和反馈进行之后,你可以继续向你的分支进行提交。如果有人告诉你你忘了做某些事,或者有一些代码有 bug,你可以在你的分支上进行修复并且提交这些修改。Github 会把你新提交的 commits 显示出来,并且也会把你接收到的所有新增的反馈统一显示在请求界面上。
进一步的提示
Pull Request 的评论基于 Markdown 格式,所以你可以向其中插入图片或 emoji 表情,可以使用一些轻量的文本格式。
部署
一旦你的 Pull Request 被审查完毕,并且你的分支通过测试,你就可以把你的修改部署到预部署环境来验证它们。如果你的分支导致了一些问题,你可以在生产环境把代码回滚到已经存在的 master 分支提交。
合并代码
现在你的修改都在预部署环境验证过了,你可以把代码合并到 master 分支。
一旦合并完毕,Pull Request 会保留一个代码历史更改记录。因为这些记录是可以搜索的,所以任何人都可以了解到这些修改为什么会进行,以及是怎样进行的。
进一步的提示
通过在 Pull Request 中添加特定关键词,你可以通过代码引用 issue. 当你的 Pull Request 被合并,这些被引用的 issue 就会关闭。举例来说,输入 Closes #32
就会引用到版本库里的 32 号 issue. 如果你想了解更多信息,参考 这篇帮助文档。
Last updated Dec 12, 2013. ben7th 翻译于 2015.7.24.