gitlab多人协同工做html
本文为亨利向《Git权威指南》的做者蒋鑫老师的答疑邮件写成。
这里特别感谢蒋鑫老师对我询问gitlab的协同工做流程问题的详细解答。
蒋鑫老师的细致专业的解答让我很是感动。
gitlab----新颖的git服务器托管网站,开源免费。你能够在本身的公司或者开发团队搭建好一个。
gitlab的工做流程是
gitlab help中建议的工做流程是这样。以下图。 git
(1).开发成员拷贝管理员创建好的项目到本身本地。vim
(2).建立本身的分支。服务器
(3).在本身的分支上写代码,并提交。gitlab
(4).推送到远程服务器,分支是本身的分支。
(分支的命名规则使用小驼峰式命名法。好比我是员工孙悟空,我就推送到孙悟空分支。分支的命名规则为开发人员姓名+所开发的功能。命名中不要使用特殊字符,不要使用点。
例如孙悟空开发的分支,命名为swkFeature1)测试
(5).在Commit页面上浏览分支。fetch
(6).建立一个合并请求。网站
(7).团队的管理员或者领导者审查而且决定是否合并员工提交的分支到主分支上。
ui
管理员在建好的项目中加入开发人员。spa
开发人员有相应的权限级别,分为Guest,Reporter,Developer,Master,等这几个角色,这几个角色的权限从低到高排列。
Developer可以推送和删除没有保护的分支,Master能够对没有保护和有保护的分支进行操做。如图1所示。
Git 的开发者都喜欢以这种方式来开展工做,在master 分支中保留彻底稳定的代码,即已经发布或即将发布的代码。
与此同时,他们还有一个名为develop 专门用于后续的开发,或仅用于稳定性测试。固然并非说必定要绝对稳定,不过一旦进入某种稳定状态,
即可以把它合并到master 里。还有在工做中,把开发任务分解为各个功能或者模块,
用topic(topic branch主题分支,有又成为feature branch特性分支),实现以后并测试稳定以后,能够合并到其余分支。
Git 的开发者都喜欢以这种方式来开展工做,在master 分支中保留彻底稳定的代码,即已经发布或即将发布的代码。
与此同时,他们还有一个名为develop分支 专门用于后续的开发,或仅用于稳定性测试。固然并非说必定要绝对稳定,
不过一旦进入某种稳定状态,即可以把它合并到master 里。
还有在工做中,把开发任务分解为各个功能或者模块,用topic分支(topic branch主题分支,有又称为feature branch特性分支),
好比实现功能1,在develop分支的基础上产生分支feature1,实现功能2,有分支feature2。
feature1和feature2实现了要求的功能以后,合并到develop分支上去。develop分支测试稳定以后,能够合并到master分支上去。
情景(如下的模拟场景没有把develop分支考虑进去,直接在master分支上分解功能分支。)
1.管理员唐僧建好了一个项目,把孙悟空加入,并授予Developer角色权限,唐僧自己就是比孙悟空高一级的Master角色。唐僧在本身的电脑上设定好了master分支为受保护分支。
2.员工孙悟空在本身电脑上工做,并推送已经写好的代码到远程服务器的孙悟空分支上,即swkFeature1上
孙悟空作了以下操做
git clone git@mygitlabold.sytes.net:root/testc01.git //从管理员唐僧那里克隆项目
cd testc01 //进入项目工做
git checkout -b swkFeature1 //建立本身的分支,并切换到此分支上,分支的命名规则为开发人员名字+所开发的功能名字。本例中命名为swk.feature1
vim aa.html //写了一个名为aa的html文件
git add aa.js //加入跟踪
ggit commit -am "swkFeature1 is ready" //提交
git push origin swkFeature1 //推送到远程服务器孙悟空分支上,git提示推送成功
git push origin swkFeature1:master //孙悟空想尝试直接推送到受保护的分支上,孙悟空是没有这个权限的,可是git提示为推送失败
图为孙悟空键入的命令
孙悟空在Commit页面上浏览分支swkFeature1,而后向项目领导唐僧建立一个合并请求。
3.这个合并请求除了唐僧能够登陆gitlab上看到以外,还能够经过邮件方式看到。唐僧即便没有登陆gitlab,只要他的邮箱支持手机邮箱等方式,
手机邮箱能够经过短信的方式通知唐僧,唐僧能够实时看到合并要求。
管理员唐僧对要求合并的分支代码进行审核。
管理员唐僧从服务器上获取孙悟空提交的分支。
git fetch
而后孙悟空推送的远程新分支被管理员唐僧拉拽到本地,可是不是以本地分支存在,
而是保存在 .git/refs/heads 以外(.git/refs/remotes/origin/之中)的远程分支。
管理员唐僧能够以下方法对孙悟空的分支进行审核。
执行
git log master..origin/swkFeature1 //能够看到孙悟空推送了几个提交。
管理员唐僧能够合并孙悟空的分支:
git merge origin/swkFeature1
管理员唐僧能够逐一对孙悟空的提交审核。若是发现有问题,管理员唐僧能够本地回滚。
git reset --hard HEAD^ # 或 master@{1}
几个反复后,当孙悟空的分支审核无误,管理员唐僧将合并后的本地 master 分支推送到远程服务器:
git push # 缺省 remote 为 origin
图 唐僧在本身的电脑上工做,审核孙悟空提交的分支代码,决定是否合并。
图 唐僧键入的命令
这个时候,唐僧打开gitlab相应的项目,查看master分支的内容。发现服务器上面有了孙悟空提交的源代码了。
唐僧能够在那个请求页面下关闭合并请求。gitlab合并请求有自动的功能,可是仍是须要管理员唐僧获取下来,合并,测试是否有问题。不建议使用gitlab的自动合并功能。
合并请求就被关闭了。
4.孙悟空那边。
孙悟空看到请求已经接受。
执行 git fetch 会获取到更新的 master 分支。而后
git checkout master
git merge --ff origin/master
swkFeature1分支完成使命,删掉吧: git branch -d swkFeature1
图孙悟空后来键入的命令,图中由于没有切换到master分支上,因此又从新执行了一遍上述命令。