声明:本文不介绍 git 的基本用法,需要读者对 git、git 命令、git 使用有一定的了解
现在,大部分项目都是用 git 来管理代码的,但当项目变大、多人协作时,git 的使用就变得复杂了,这时就需要在 git 使用的流程上来思考如何更优的使用 git。
对于大部分 web 项目而言,并不像软件、APP 项目一样有版本的划分,而是不断的更新、迭代,这就使得 web 项目的 git 使用要复杂一些,需要管理好哪些是正在开发的代码、哪些是提交测试的代码、哪些是已经上线的代码、多人共同开发时如何避免代码冲突与线上新代码被旧代码覆盖等等。
1. 一个分支
如果项目比较小,不频繁更新时,可以只用
master
一个分支。
使用流程:
说明:
-
提交代码到本地
master
分支,并推送到远程
master
分支
-
持续集成构建或本地构建,然后上传到服务器
上传到服务器有两种方式:
-
持续集成构建,然后同步到服务器
-
本地构建,然后上传到服务器(为了简洁清晰,后面的图例中会隐藏这种方式)
2. 开发分支与个人分支
如果项目稍大些,频繁更新时,就需要另外一个开发分支:
-
master
:主分支,对应线上代码
-
dev
:开发分支,对应开发代码
使用流程:
说明:
-
提交代码到本地
dev
分支
-
在需要构建项目时
merge
到本地
master
分支,并推送到远程
master
分支
-
持续集成构建,然后同步到服务器
如果是多人参与的项目,就需要个人开发分支了:
-
master
:主分支,对应线上代码
-
man1
:个人
man1
开发分支
-
man2
:个人
man2
开发分支
使用流程:
说明:
-
提交代码到本地
man1
分支(以
man1
个人为例)
-
在需要构建项目时
merge
到本地
master
分支,并推送到远程
master
分支(有可能需要先
pull
远程的代码)
-
持续集成构建,然后同步到服务器
在适当的时候,每一个个人分支(如
man1
,
man2
)都需要
pull
一下
master
分支,以保证自己本地的代码的版本不会低于服务器。
3. 多个服务器环境
如果项目比较大,并且对应多个服务器环境(测试环境、产品环境):
-
master
:主分支
-
prod
:产品分支,对应产品服务器环境
-
test
:测试分支,对应测试服务器环境
-
dev
:开发分支
使用流程:
构建测试环境:
-
提交代码到本地
dev
分支
-
在需要构建项目时
merge
到本地
test
分支,并推送到远程
test
分支
-
持续集成构建,然后同步到测试服务器
构建产品环境可以由远程的
test
分支
merge
到远程
prod
分支进行持续集成构建,也可由本地
dev
或
test
分支
merge
到本地
prod
分支,并推送到远程
prod
分支进行持续集成构建。
如果是多人参与的项目,就需要个人开发分支了:
-
master
:主分支
-
prod
:产品分支,对应产品服务器环境
-
test
:测试分支,对应测试服务器环境
-
man1
:个人
man1
开发分支
-
man2
:个人
man2
开发分支
使用流程:
构建测试环境:
-
提交代码到本地
man1
分支(以
man1
个人为例)
-
在需要构建项目时
merge
到本地
test
分支,并推送到远程
test
分支(有可能需要先
pull
远程的代码)
-
持续集成构建,然后同步到测试服务器
构建产品环境可以由远程的
test
分支
merge
到远程
prod
分支进行持续集成构建,也可由本地
man1
或
test
分支
merge
到本地
prod
分支,并推送到远程
prod
分支进行持续集成构建。
在适当的时候,每一个个人分支(如
man1
,
man2
)都需要
pull
一下
prod
分支(如有需要,也可以
pull
test
分支),以保证自己本地的代码的版本不会低于服务器。
4. 多个需求同时开发
有时候会有多个需求同时开发,并且相互独立,为了不影响每个需求的测试与上线,需要为每个需求创建一个分支。
-
master
:主分支
-
prod
:产品分支,对应产品服务器环境
-
test
:测试分支,对应测试服务器环境
-
man1
:个人
man1
开发分支
-
man2
:个人
man2
开发分支
-
task1
:需求
task1
开发分支
-
task2
:需求
task2
开发分支
使用流程:
构建测试环境与之前的步骤一致,但构建产品环境时,为了保证各个需求不相互影响,一般由本地直接合并到
prod
分支:
-
本地
task1
分支
merge
到本地
prod
分支,并推送到远程
prod
分支进行持续集成构建
-
每一个个人分支(如
man1
,
man2
)都需要
pull
一下
prod
分支,以保证自己本地的代码的版本不会低于服务器
-
最后删除
task1