如今,大部分项目都是用 git 来管理代码的,但当项目变大、多人协做时,git 的使用就变得复杂了,这时就须要在 git 使用的流程上来思考如何更优的使用 git。html
对于大部分 web 项目而言,并不像软件、APP 项目同样有版本的划分,而是不断的更新、迭代,这就使得 web 项目的 git 使用要复杂一些,须要管理好哪些是正在开发的代码、哪些是提交测试的代码、哪些是已经上线的代码、多人共同开发时如何避免代码冲突与线上新代码被旧代码覆盖等等。前端
若是项目比较小,不频繁更新时,能够只用 master
一个分支。java
使用流程:git
master
分支,并推送到远程 master
分支上传到服务器有两种方式:github
若是项目稍大些,频繁更新时,就须要另一个开发分支:web
master
:主分支,对应线上代码dev
:开发分支,对应开发代码使用流程:后端
dev
分支merge
到本地 master
分支,并推送到远程 master
分支若是是多人参与的项目,就须要我的开发分支了:服务器
master
:主分支,对应线上代码man1
:我的 man1
开发分支man2
:我的 man2
开发分支使用流程:测试
man1
分支(以 man1
我的为例)merge
到本地 master
分支,并推送到远程 master
分支(有可能须要先 pull
远程的代码)在适当的时候,每个我的分支(如 man1, man2
)都须要 pull
一下 master
分支,以保证本身本地的代码的版本不会低于服务器。code
若是项目比较大,而且对应多个服务器环境(测试环境、产品环境):
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
分支),以保证本身本地的代码的版本不会低于服务器。
有时候会有多个需求同时开发,而且相互独立,为了避免影响每一个需求的测试与上线,须要为每一个需求建立一个分支。
master
:主分支prod
:产品分支,对应产品服务器环境test
:测试分支,对应测试服务器环境man1
:我的 man1
开发分支man2
:我的 man2
开发分支task1
:需求 task1
开发分支task2
:需求 task2
开发分支使用流程:
构建测试环境与以前的步骤一致,但构建产品环境时,为了保证各个需求不相互影响,通常由本地直接合并到 prod
分支:
task1
分支 merge
到本地 prod
分支,并推送到远程 prod
分支进行持续集成构建man1, man2
)都须要 pull
一下 prod
分支,以保证本身本地的代码的版本不会低于服务器task1
分支由于不一样分支修改同一个文件而致使的文件冲突是多人协做开发中比较常见的问题之一,避免这种问题的思路主要有如下的几种:
有一些经常使用的分支,可能咱们会用到:
bug
分支:用于紧急修复产品环境的 bug
上面的图例只有测试服务器和产品服务器,更多服务器类型的工做流程是相似的;图例也只有 man1
和 man2
两个我的分支,更多我的分支的工做流程也是相似的。
上面的图例主要用于如下特色的项目(须要把整个项目打包成一个总体):
这样作主要是为了不一些问题:
push
到 test
分支作持续集成构建,很难保证线上新代码不会被旧代码覆盖对于像下面这种特色的项目,能够根据状况调整、简化流程:
好比:
master
:主分支man1
:我的 man1
开发分支man2
:我的 man2
开发分支task1
:需求 task1
开发分支task2
:需求 task2
开发分支使用流程:
若是多个需求没有冲突,能够同时在 man1
我的分支上开发,并根据须要上传到不一样的服务器。
若是多个需求有冲突,能够每一个需求都新建一个分支,如上图所示:
task1
分支(以 task1
我的为例)task1
分支