git学习(2)gitlab 使用

目录

gitlab

gerrit

gitlab 实操作

一:project

二:group

三:MR(merge request, 合代码请求)

四:ci, Pipelines (自动化测试管道)

五:实际操作:(这里全是本地测试,所以用户名,密码,邮箱等等都随意)

5.1建group

5.2 注册/创建 普通用户

5.3 往group里面添加普通用户成员

5.4 group下建 project

5.5  在Linux上下载代码

5.6 普通用户提代码


总览原理

git 用来管理代码仓库,不同与svn ,采用的分布式,每个用户有本地的仓库,在离线的仓库里面就可以创建分支,打tag, 在不同的分支之间切换, 查看每一笔提交,回溯,或是将某一个提交cherry pick  到另外的分支,merge 合入其他分支,  完事之后可以和远程仓库进行同步。
         然而所有这些操作都是类似于linux 命令行的形式,(浓浓的linux风格,毕竟git本身就是Linux内核的发明人Linus Benedict Torvalds 捣鼓出来的)实际使用中还是需要一些更直接容易上手的wind 界面方式操作, 于是就有了 gitlab和gerrit 这样的软件,他们都是基于git作为基础,在远程仓库上对代码的提交和合入作为了其他的包装(内部还是用git 来管理代码),并架设一个web服务器提供网页web访问,可以在真正合入代码的时候提供代码审查,甚至接入 部分的自动化测试,通过这些审查和测试之后再 合入(使用git操作)到远程仓库。

gitlab

gitlab就是这样一个 开源免费的软件套件, 和gerrit 最大的不同,gitlab提交代码,一般是某一个用户在要修复的release基础分支上再new 一个fix分支,提交代码到自己的fix分支,把本地的fix分支也push到远程服务器上,然后去gitlab上做一个merge请求,请求将自己这个fix分支merge到要修复的release基础分支上,  管理员可以对这个merge请求做代码审核,做自动化的编译测试等,确认无误,同意merge请求,就可以将fix分支的修改真正合入到release分支,然后这个fix分支如果没用的话一般可以在合入之后就删除了,作为merge的一个临时分支产物。   这些代码审核,merge请求, 都是可以在web上操作查看的。  当然,一般会设置普通用户不能直接往远程仓库的release分支上合入代码,设置了权限,避免代码没有经过审核就入了库。

gerrit

而gerrit, (Android 源码审核一般都是用的gerrit),  是在远程仓库和用户仓库之间设置了一个缓存库,普通用户提交代码,不需要自己手动new一个临时分支,而是直接往要提代码的分支上修改,不过再同步 push到远程仓库的时候,不能直接同步到远程实际仓库中(报权限错误),必须往这个中间仓库推送同步,然后gerrit经过review,把中间仓库同步到实际的远程仓库。 所以有gerrit管理的仓库一般推送代码不是直接git push,是 git pus HEAD:refs/for/xxreleasebranchxx .有 HEAD:refs/for/这个头

gitlab 实操作

作为本地gitlab服务器的管理员,有哪些操作?基本的肯定是管理其他用户,权限等等。
gitlab通过 group 管理用户,通过 project管理仓库。

所有的说明文档,官网:Use GitLab | GitLab

同样是可以通过gitlab官网主界面的底部的标签找到相关页面入口的,docs
基本看看官方原文档也能看懂(英文),csdn博客也有各式各样的翻译了,不过还是从官方文档入手感觉比较放心。

一:project

         Projects can be available publicly, internally, or privately. GitLab does not limit the number of private projects you can create
        1. project 有三种属性:public internal  private 
                public: public projects can be cloned without any authenticaton over HTTPS.
                           They are listed in the public access directory (/public) for all users
                            公共的,无需任任何权限验证就可以clone, 所有用户都可在列表中看到这个project 
                internal:Internal projects can be cloned by any signed-in user except external users.
                                They are also listed in the public access directory (/public), but only for signed-in users.  内部的,可以被已经注册的用户clone(在本服务器上注册过的用户,并没有提到grop的限制)
                private:Private projects can only be cloned and viewed by project members (except for guests).
                        They appear in the public access directory (/public) for project members only
                        私有: 只能是本组的。
        2. 创建projcet
                  原文档也有详细的说明,软件都是在跟新变化的,就不自己再翻译了,还是瞅瞅官方文档吧。基本也是傻瓜式下一步下一步的操作。

二:group

        (待补充)

三:MR(merge request, 合代码请求)

        gitlab 和 gerrit ,都

四:ci, Pipelines (自动化测试管道)

       (待补充)

五:实际操作:(这里全是本地测试,所以用户名,密码,邮箱等等都随意)

5.1建group

注意,创建group 有一个属性: Require all users in this grop to set up two-factor authentication,默认是勾着的,要把它 去掉,不然成员用户登陆操作的时候,总是弹出个 双因子验证身份的界面(类似于qq安全,动态密码等等这样的功能,加强身份验证的,本地测试全去掉。)如果创建的时候没有修改,后续点击 grop,页面的第一条就有 edit 编辑按钮可以进去修改group的属性。

git学习(2)gitlab 使用_第1张图片

5.2 注册/创建 普通用户

 在登陆界面直接注册普通用户:(也可以在管理员里面直接创建用户),自己注册的用户需要管理员的批准,在 Admin Area->users_pending approval.
下面注册了两个用户:
suolong   [email protected]  password:12345678
shanzhi   [email protected]   password:12345678
(这些用户信息,头像,邮箱信息,密码等后续都可以通过管理员账号登陆进去进行修改,邮箱只要符合格式即可,至于是否真实存在可用,本地测试不重要)
git学习(2)gitlab 使用_第2张图片

5.3 往group里面添加普通用户成员
 

可以选择角色,默认为guest访客,切换为developer开发者角色 

git学习(2)gitlab 使用_第3张图片

5.4 group下建 project

 注意,每个用户都可以建project,管理员用户也可以直接建project,有三个属性,但是这个project不是和grop关联的,这种个人建的 private project需要自己手动去邀请成员,我们这里希望整个group都自动有这个project的权限,所以是先建group,然后去group下面再建属于这个group的project.

git学习(2)gitlab 使用_第4张图片在群组里面创建project,群组成员都可以在自己的project列表里面看到这个project
git学习(2)gitlab 使用_第5张图片 (为了在同一太电脑上登陆多个普通用户,做了个蠢的操作,装了多浏览器,一个浏览器等一个账户。没办法浏览器的什么缓存机制总是自动登上第一个账户上去了 。。。。。。)

5.5  在Linux上下载代码

       Linux下生产ssh-key ,公钥
        #ssh-keygen
        #cat ~/.ssh/id_rsa.pub
       将输出的公钥 添加到gitlab 普通用户的sshkey配置页里面去。(这一步主要是添加下载代码的权限)
       就可以下代码:
从gitlab ,project 下面复制这个地址 XX 过来,在Ubuntu上:
#git clone XX
默认这个地址是个域名,如果我们的虚拟机无法解析域名,直接换成gitlab服务器的ip地址就行了,如下图:
git学习(2)gitlab 使用_第6张图片
     

5.6 普通用户提代码

gitlab 以MR作为一次提交,merge request

        用自己的话概括,就是, 1.0 开发都是自己先 git checkout out -b 创建一个自己私人临时的分支,2.0然后你往自己的分支上修改提代码, commit到本地,3.0然后push到服务器上这个你的临时分支,(第一次push 之前可以手动和远程仓库关联,因为远程仓库没有你这个个人临时分支,不执行关联操作也没有关系,直接push, 会报错有提示你添加xxx选项,用建议的命令再push一次即可,push成功服务器上的仓库也会对等地新建好个人的这个临时分支。)在自己的临时分支上提代码就比较放松不会影响其他人,万一提错了把这个分支干掉重新来也是没问题的 4.0在gitlib 上就可以看到自己的临时分支和自己的提交,等确认这个OK, 就去Gitlib上创建一个MR, mege request, 请求把你这个临时分支merge到指定的正式分支上去,比如develop分支。 这个MR,就是合码请求。 然后等人review你这个MR, 批准,5.0合入到正式分支

到上面这个过程,只是把pubkey 添加到了一个 gitlab个人账号上,直接push的时候会有错误提示:
git学习(2)gitlab 使用_第7张图片

 提示已经很明确,可以通过 git config 设置用户身份,--global参数是全局的缺省值,我们只是想在这个目录的这个仓库里面使用这个身份,换一个目录使用其他身份,所以不添加global参数,一般公司是开发的话个人肯定是只有自己一个用户,都使用 --global

所以,下载代码的时候在gitlab账号上绑定了ssh-key ,应该已经明确gitlab账号和本机的关系了,但是这里git commit 不知道用户,思考一下,这里git commit操作知识git的本地操作,和gitlab服务器是没有关系的,所以这里 git config, 配置的是git.  表面这个仓库里面对git命令操作的用户

直接在这个目录下修改提交代码,是不允许的(这是gitlab对git做的配置,git本身是可以设置允许直接提交的),如下:
git学习(2)gitlab 使用_第8张图片

 我们提代码,需要自己在开创一个个人的或者是用于修改某一个bug/功能的分支,在新的分支上修改提交代码,然后把这个新分支也推送到gitlab服务端,再发起一个合并代码的请求,请求把新分支的修改合并到主干分支。
#git branch personal/suolong   //从当前分支节点新建一个 personal/suolong分支
#git checkout personal/suolong   //切换到 personal/suolong分支    
上面两条命令可以合成一条,git checkout -b personla/suolong
然后在新的分支上commit,push
git学习(2)gitlab 使用_第9张图片

 新的分支只是在本地,所以第一次push的时候,需要 --set-upstream  ,这样服务器上的仓库也有我们创建的新分支 personal/suolong  这个仓库使用的是 suolong账号,登录这个账号可以看到刚才的提交:

git学习(2)gitlab 使用_第10张图片

 直接在上面 create merge request 来个合码请求,MR,从个人分支 personal/suolong合并到 main
git学习(2)gitlab 使用_第11张图片

你可能感兴趣的:(git,git,gitlab)