gitlab多人协同工作
gitlab多人协同工作
本文为亨利向《Git权威指南》的作者蒋鑫老师的答疑邮件写成。
这里特别感谢蒋鑫老师对我询问gitlab的协同工作流程问题的详细解答。
蒋鑫老师的细致专业的解答让我非常感动。
gitlab----新颖的git服务器托管网站,开源免费。你可以在自己的公司或者开发团队搭建好一个。
gitlab的工作流程是
gitlab help中建议的工作流程是这样。如下图。 
(1).开发成员拷贝管理员建立好的项目到自己本地。
(2).创建自己的分支。
(3).在自己的分支上写代码,并提交。
(4).推送到远程服务器,分支是自己的分支。
(分支的命名规则使用小驼峰式命名法。比如我是员工孙悟空,我就推送到孙悟空分支。分支的命名规则为开发人员姓名+所开发的功能。命名中不要使用特殊字符,不要使用点。
例如孙悟空开发的分支,命名为swkFeature1)
(5).在Commit页面上浏览分支。
(6).创建一个合并请求。
(7).团队的管理员或者领导者审查并且决定是否合并员工提交的分支到主分支上。
管理员在建好的项目中加入开发人员。
开发人员有相应的权限级别,分为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分支上,所以又重新执行了一遍上述命令。 
gitlab多人协同工作的更多相关文章
- gitlab多人协同工作 ——转
http://www.360doc.com/content/14/0508/17/14416931_375851686.shtml
- gitlab多人协作开发
gitlab多人协同工作 本文为亨利向<Git权威指南>的作者蒋鑫老师的答疑邮件写成. 这里特别感谢蒋鑫老师对我询问gitlab的协同工作流程问题的详细解答. 蒋鑫老师的细致专业的解答让我 ...
- gitlab使用 —— 多人协同工作(重要技能)
gitlab使用 —— 多人协同工作(重要技能) 学习链接: http://herry2013git.blog.163.com/blog/static/219568011201341111240751 ...
- docker中建立私有git服务器[gitlab]
现在使用git的很普遍,在开发内部如何建立个git服务器,本文以gitlab为例,让你分分钟就可以搭好一个环境[docker的威力非同一般] 首先在docker.com找到gitlab的下载源和信息, ...
- git服务器gitlab之搭建和使用--灰常好的git服务器【转】
转自:http://blog.csdn.net/zy416548283/article/details/38057925 git服务器比较有名的是gitosis和gitolite,这两个管理和使用起来 ...
- git服务器gitlab之搭建和使用
git服务器比较有名的是gitosis和gitolite,这两个管理和使用起来稍微有些复杂,没有web页面,而gitlab则是类似于github的一个工具,github无法免费建立私有仓库,并且为了代 ...
- Git本地服务器搭建及使用详解
Git本地服务器搭建及使用 Git是一款免费.开源的分布式版本控制系统.众所周知的Github便是基于Git的开源代码库以及版本控制系统,由于其远程托管服务仅对开源免费,所以搭建本地Git服务器也是个 ...
- gitservergitlab之搭建和使用
gitserver比較有名的是gitosis和gitolite,这两个管理和使用起来略微有些复杂,没有web页面,而gitlab则是类似于github的一个工具,github无法免费建立私有仓库,而且 ...
- 二十三.Subversion基本操作、使用Subversion协同工作、制作nginx的RPM包
1.Subversion基本操作 web1 1.1 安装Subversion服务器 ]# yum -y install subversion 1.1.1 创建版本库 ]# mkdir /var/svn ...
随机推荐
- Sql常用日期格式
原文发布时间为:2010-09-16 -- 来源于本人的百度文章 [由搬家工具导入] SQL Server中文版的默认的日期字段datetime格式是yyyy-mm-dd Thh:mm:ss.mmm ...
- ASP.NET三层架构的优点和缺点
原文发布时间为:2009-10-24 -- 来源于本人的百度文章 [由搬家工具导入] 小项目,以后变动不大的不用三层架构。 ASP.NET三层结构说明 完善的三层结构的要求是:修改表现层而不用修改逻辑 ...
- 透明层提示框代替windows警告窗口方法!
原文发布时间为:2009-04-05 -- 来源于本人的百度文章 [由搬家工具导入] 有人会说,怎么网页用JavaScript会有安全提示,而其他网站上面用了JavaScript都没有安全提示,呵呵, ...
- 排名次SQL语句【名次可重复时】
原文发布时间为:2008-10-26 -- 来源于本人的百度文章 [由搬家工具导入] 功能实现 名次可重复时,比如第一名有两个。。。 select *,(select count(distin ...
- luogu 2463 [SDOI2008]Sandy的卡片 kmp || 后缀数组 n个串的最长公共子串
题目链接 Description 给出\(n\)个序列.找出这\(n\)个序列的最长相同子串. 在这里,相同定义为:两个子串长度相同且一个串的全部元素加上一个数就会变成另一个串. 思路 参考:hzwe ...
- 自定义的类型放入STL的set中,需要重载自定义类中的“<”符号(转)
在以前学习STL的时候,曾经学到过,如果要将自定义的类型放入到set中的话,就需要重载“<”符号,原因是set是一个有序的集合,集合会按照“<”比较的大小,默认按照从小到大的顺序排列.假设 ...
- phpexcel--导入excel表格
最近在做一个小项目,就是一个管理信息的小系统:要求有导入和导出的信息为excel的功能,研究过导入导出功能的肯定知道导出要比导入的简单多了,导入用的phpexcel,当时对phpexcel是完全不了解 ...
- 16Aspx.com-书通网中小学生免费在线学习网站源码 带采集带手机版帝国cms内核
=============================================== 源码站长资源交易专业网-商业源码下载,VIP源码,程序交易,毕业设计交易,站长交易|- 16aspx.c ...
- Cryptography I 学习笔记 --- 总结
在b站上大概的看完了Dan Boneh的密码学,对现代密码学总算有了一个粗浅的认识. 总算能在纸上手写RSA公式并且证明之了,蛤蛤. 总体的感触就是,现代密码学是一个非常博大精深的体系,我等程序员最重 ...
- codevs——3111 CYD啃骨头(背包)
裸的01背包 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description CYD吃饭时有N个骨头可以啃,但CYD要午睡了 ...