之前总结过一篇关于git入门的文章,这几天心血来潮,结合我在手机微博开发团队中实际经验谈一谈git在工作中的应用吧。
集中式和分布式
git与之前的svn相比,主要体现在集中式和分布式的区别。集中式主要依托于中央服务器,开发人员从中央服务器获得最新的代码,开发完成后再提交到中央服务器,脱离了中央服务器,基本上服务就不行了。而分布式版本管理系统在本地都有一个仓库,可以不依赖中央服务器进行开发提交代码,在需要往远端合并的时候才进行。
git工作区和缓存区
git在本地工作的工作状态如下所示,对于新添加/更新的文件只有通过git add添加到缓存区,然后通过git commit才能提交到仓库中。
可能涉及到的操作。
创建版本库
git init(这个用到的很少)
添加文件并且提交
git add & git commit
查看提交日志
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等扩展功能。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。