因为 公司官网 策划、设计(Sketch)、前端(Bootstrap)、后端(Express)都是我一个人搞定,所以考虑边学变尝试的角度,从一开始就用了 Git 作为 Version Control System。
比较了 GitHub 和 Bitbucket,虽然前者的 community 比较强大,但是后者给小 studio 提供了非常吸引人的 plan:
- Github:鼓励开源,按照 Private Repository 的数量收费;
- Bitbucket:按照 team 的人员数量收费,5 users 以内的 Private Repository 免费。
这个 project 就我一个人,所以自然就选了 Bitbucket。一开始什么都在 master branch 上操作,主要是用来把白天公司 mbp 上没完成的代码 pass 到家里的 mbp 上继续写。然后觉得同时写各种功能变得越来越乱,就根据各种供能建了好多 branch,但是合来合去也觉得麻烦就怕会出错。
稍微研究了下网上的 Git 部署策略文章,找到阮一峰老师的这篇《Git分支管理策略》,终于找到适合自己的策略了。
大致是上图这样的 workflow,主要分成 3 个 branch:
- 主线分支 Master
- 开发分支 Develop
- 临时性分支 temporary branches:
- 功能分支 Feature
- 预发布分支 Release
- 抓虫分支 Fixbug
具体各个 branch 的描述大家去看阮一峰老师的文章,这里仅仅提一下几个重点。
代码库应该有一个、且仅有一个主分支 Master
首先,代码库应该有一个、且仅有一个主分支。所有提供给用户使用的正式版本,都在这个主分支上发布并用 Tag 标记。
1 | $ git tag -a 1.2 |
为了保证版本演进的清晰,使用 –no-ff 参数
默认情况下,Git 执行”快进式合并”(fast-farward merge),会直接将 Master 分支指向 Develop 分支。使用–no-ff参数后,会执行正常合并,在Master分支上生成一个新节点。为了保证版本演进的清晰,我们希望采用这种做法。关于合并的更多解释,请参考 Benjamin Sandofsky 的《Understanding the Git Workflow》。
将Develop分支发布到Master分支的命令:
1 | # 切换到Master分支 |
记得删除临时性分支
Feature、Release、Fixbug 这三种分支都属于临时性需要,使用完以后,应该删除,使得代码库的常设分支始终只有 Master 和 Develop。
创建一个功能分支:
1 | $ git checkout -b feature-x develop |
开发完成后,将功能分支合并到 develop 分支:
1 | $ git checkout develop |
删除 feature 分支:
1 | $ git branch -d feature-x |