以前总结过一篇关于git入门的文章,这几天心血来潮,结合我在手机微博开发团队中实际经验谈一谈git在工做中的应用吧。
git
集中式和分布式github
git与以前的svn相比,主要体如今集中式和分布式的区别。集中式主要依托于中央服务器,开发人员从中央服务器得到最新的代码,开发完成后再提交到中央服务器,脱离了中央服务器,基本上服务就不行了。而分布式版本管理系统在本地都有一个仓库,能够不依赖中央服务器进行开发提交代码,在须要往远端合并的时候才进行。缓存
git工做区和缓存区服务器
git在本地工做的工做状态以下所示,对于新添加/更新的文件只有经过git add添加到缓存区,而后经过git commit才能提交到仓库中。分布式
可能涉及到的操做。ide
建立版本库svn
git init(这个用到的不多)gitlab
添加文件而且提交测试
git add & git commiturl
查看提交日志
git log
gitlab远程仓库
由于内部商业代码,因此咱们没有托管到github,这里使用和gitlhub类似的gitlab做为远程仓库,咱们使用的社区版,虽然比商业版少了些功能,但基本上是够用的。关于软件的安装咱们这里就不作介绍了,周期性的会随着gitlab的发布而更新。
git工做流
网上介绍工做流的文章也不少,大体分红下面三种:
Git flow
Github flow
Gitlab flow
感受根据项目的实际状况都略有差异。咱们的工做流采起以下方式:
开发步骤说明:
1. project fork
咱们的项目通常都隶属于项目组,平常开发先把主仓库fork到本身的空间下。
2. git clone
经过git clone把本身远程仓库上的项目代码clone到本身本地目录。
3. git branch & git checkout
建立分支而且切换到分支上面,咱们的全部的功能都是基于分支进行开发的,每次有新的功能或者对代码进行改进的时候,咱们都会建立一个新的分支进行开发。
4. git add & git commit
有更新或者添加的代码,咱们执行git add和git commit 提交到本身本地仓库。
5. git pull
即上图中的步骤5,同步代码,开发功能的时候建立分支开始时,线上的代码也是往前走的,功能开发完,代码可能落后于master的代码,这时就须要进行同步到最新的代码,检查你的功能代码是否有代码冲突。
6. git push
这一步是把代码推送到远端仓库上。
7. create merge request
当接到产品或者业务测试的邮件,肯定能够上线的时候,建立个merge request,这时代码就能够进入到待合并状态,若是是常规上线,以后由专人进行合并,QA回归测试,而后上线。
git remote
上面的工做流中涉及到远程仓库的信息,如:git pull,你的代码是经过你的远程仓库拷贝的,为何能够从远程项目组仓库进行代码同步呢,在这里说下git remote相关的内容。
咱们执行git remote -v 会看到一条通道信息,这个是你本地仓库到远程仓库的通道,origin是它的名字。
而后咱们经过git remote add [remote_name] [remote_url] 便可添加一条通道,如上面的upstream(也能够起其余的名字)。这时你本地的仓库就对应两条通道了。
其中upstream是不能够直接push代码的,仅用于同步代码。
git pull upstream master即从远程master上同步最新的代码。
上线
咱们以前采用的以下图方式进行上线。
常规上线流程
一条基准线master,master上面的代码都是上线最新的代码,全部人都经过master更新同步代码。
在某个时间点,好比今天的11点吧(我的推荐11:00左右上线,即上午上线),若是测试没有问题,此时基于master建立个上线的tag,咱们命名为release.0722.0,而后把它推上线。
稳定以后,咱们进行下一个版本的准备,此时基于master建立一个分支branch,好比:online.0723.0。
而后将准备在0723.0上线的merge request都合并到这个分支上面。而后建立QA回归测试tag 如candidate.0722.0,而后把这个测试tag推到仿真机器上测试。
当QA测试没有问题后,会给开发测试邮件,此时咱们会把上述online.0723.0的代码合并到master上,而后基于master打出一个最新的常规上线包如release.0723.0上线,此时也确保master上面是最新的代码。
6. 如此反复,进入下一阶段的常规上线循环。
紧急上线流程
对于紧急上线流程的状况,咱们这里仍是十分常见的,好比紧急修复bug,紧急功能上线等状况。
紧急上线必然有紧急的流程应对,首先,这个需求必须领导知道的。而后业务方测试没有问题,在确认没有问题的状况下,这部分代码是直接合并到master上,如图中步骤6,而后基于最新的master代码建立tag,如release.0723.1,而后上线。这个地方其实能够加上一个emergency标识,告诉你们这个上线是个紧急上线。
好了,关于git和gitlab的基本功能就到这里了,下一篇文章咱们介绍下git hooks和gitlab hooks以及gitlabCI等扩展功能。