林间有风团队目前共有两个开源项目,一个是微信小程序原生组件库 Lin UI,一个是先后端分离的web端内容管理系统 Lin CMS。笔者属于 Lin CMS 前端小组,也就是 lin-cms-vue 项目。从 2019年1月17日
提交第一个 commit 至今差很少已经半年时间,在磕磕绊绊中也有了些许成长。前端
本文主要介绍 lin-cms-vue 的开发流程。刚开始团队成员较少,都是在一个分支上进行开发,并无过多的考虑什么流程方案。后来因为团队成员的不断补充,咱们开始规范开发流程,采用的是目前比较主流的 GitFlow 工做流。一个好的、统一的开发流程,在团队合做中是相当重要的,可以极大的提高工做效率。那么下面大体介绍下 GitFlow 工做流。vue
虽然有这么优秀的版本管理工具(Git),可是咱们面对版本管理的时候,依然有很是大的挑战,你们工做在同一个仓库上,那么彼此的代码协做必然带来不少问题和挑战,以下:git
GitFlow 被誉为是在 Git 之上构建的一项软件开发最佳实践,它定义了一个围绕项目发布的严格分支模型。GitFlow 没有增长任何新的概念和命令,它只是一个 git 管理的规范,一个开发的指导方针。github
分支 | 说明 |
---|---|
master | 主分支(保护分支) |
develop | 开发分支(保护分支) |
hotfix/ | bug紧急修复分支 |
feature/ | 功能分支,开发新功能,完成之后合并到开发分支 |
经过上面的简单介绍咱们大体了解了什么是 GitFlow 工做流,固然这只是一个指导方针,在实际应用中还要根据项目及成员的具体状况来进行适当的调整。web
咱们将 master
和 develop
分支列为保护分支。保护分支意味着任何人不得直接提交代码到该分支,只能经过 Pull Request
合并分支。下面以一个新功能的开发为例,介绍下相关开发流程。小程序
这里以开发一个新的功能验证码(security code)为例:后端
从当前最新的开分分支 develop
切出一个 feature
功能分支,执行下面命令,注意这是在本地仓库的新分支:微信小程序
git checkout -b security-code
复制代码
在 security-code
分支编写功能代码,提交commit,到此时咱们均是在本地仓库操做,若是想要将本地的 security-code 分支 push 到远端,执行下面命令,其中 feature/ 表明这是一个功能分支:微信
git push origin security-code:feature/security-code
* [new branch] security-code -> feature/security-code
复制代码
在远端建立了 feature/security-code 分支后,security-code 的功能尚未开放完毕,须要继续开发并提交 commit。将近期 commit 提交至远端,执行如下命令:框架
git push origin HEAD:feature/security-code
复制代码
若是在开发 security-code
时,有小伙伴将新功能合入了 develop
而 security-code 又依赖新功能怎么办?那就把远端已经合并过最新的开发分支 develop 拉下来:
git pull origin develop
复制代码
假设 security-code
已经开发完毕,而且有10条commit记录,咱们要将功能分支的代码合并到开发分支:提交 PR
到 develop
分支。 不论是团队成员仍是外部贡献者的 pull request 都须要通过代码 review
才能合并进开发分支。代码合并有三种方式:Create a merge commit / Squash and merge / Rebase and merge。
第一种 (Create a merge commit) 直接将 security-code
分支的 commit 合并到 develop
。
第二种 (Squash and merge) 将 security-code
分支的这10条 commit 合并成一条后,再合入 develop
(建议使用)。
第三种 (Rebase and merge) 与第二种功能同样,区别是 rebase 变基,squash 只合并 commit。
合并分支后便可将功能分支删除,删除分支分为删除本地分支和远端分支,远端分支的删除直接在 GitHub 页面操做便可,下面的命令来删除本地分支:
git branch -D security-code
复制代码
通过长时间的分支增删后,咱们会发现有些远端的分支分明已经删掉了,可是在本地分支经过 git branch -a
仍是可以看到那些已经被删除掉的分支,这时候咱们能够用下面的命令进行清理:
git remote prune origin
➜ lin-cms-vue git:(exception) git remote prune origin
修剪 origin
URL:https://github.com/TaleLin/lin-cms-vue.git
* [已删除] origin/components/select
* [已删除] origin/feature/404
* [已删除] origin/feature/enter-animation
* [已删除] origin/feature/layout
* [已删除] origin/feature/ui-color
* [已删除] origin/feature/ui-op
* [已删除] origin/publish/beta2
复制代码
通过一段时间的开发,咱们完成了一个阶段的开发任务。这时候要进行功能测试,将当前开发分支的代码部署到测试环境,团队成员共同完成测试。若是发现bug及时进行修复,如无异常,则发布新版本:
Lin CMS有一个线上演示项目,在开源项目新版本发布后,跟你们同样,笔者要转换角色以一个开源项目使用者的身份进行线上项目升级。可是,做为工程类的开源项目,不能像一些只引用核心库的开源项目那样,直接更新版本就行,咱们的项目自己已经有写的有业务了,这时候要怎么办呢?
若是没有修改框架的核心代码,只是新增了一些业务文件,能够直接将框架核心代码替换掉。若是是另外一种状况已经修改了框架的核心代码,这时候想要升级就要比较当心了,须要更新GitHub新版本到本身的项目。这种方法实际上是比较危险的,要求你可以彻底把握住冲突的部分那些是须要的,那些不须要的。
git remote add lin-cms-vue https://github.com/TaleLin/lin-cms-vue.git
复制代码
添加后能够经过下面的命令查看下本地项目的远程连接列表:
git remote -v
# ➜ lin-cms-demo git:(master) git remote -v
# lin-cms-vue https://github.com/TaleLin/lin-cms-vue.git (fetch)
# lin-cms-vue https://github.com/TaleLin/lin-cms-vue.git (push)
# origin https://git.coding.net/indexer/lin-cms-demo.git (fetch)
# origin https://git.coding.net/indexer/lin-cms-demo.git (push)
复制代码
git merge lin-cms-vue/master --allow-unrelated-histories
复制代码
注意: 若是在merge后,发现项目改崩掉了,这时候记得不要提交commit,执行下面的命令,将本次修改所有撤回。
git checkout .
复制代码
以上就是 lin-cms-vue 的开发流程总结。文笔很菜,以前也不多进行这种文字形式的输出,之后会更多的增强锻炼,但愿能给本文的读者带来一丝收获。
笔者如今也是处于学习阶段,若有错误欢迎指正,以为有用的能够帮忙给开源项目点个Star,QQ讨论群:814597236,感谢!