GitLab私有Git
1 GitLab简介
GitLab是整个DevOps生命周期的第一个单一应用程序。只有GitLab才能启用Concurrent DevOps,从组件链的约束中解锁组织。GitLab提供无与伦比的可见性,更高的效率和全面的治理。这使得软件生命周期加快了200%,从根本上提高了业务速度。
![](https://file.jishuzhan.net/article/1761059252987760641/1af8c512fa847a487c8ec4a454dc7369.webp)
2 GitLab安装(无需安装)
默认安装位置:
![](https://file.jishuzhan.net/article/1761059252987760641/497261de0bc4de0a883d54df92ad06b7.webp)
浏览到服务器IP并登录
首次访问时,您将被重定向到密码重置屏幕。提供初始管理员帐户的密码,您将被重定向回登录屏幕。使用默认帐户的用户名root
登录。
![](https://file.jishuzhan.net/article/1761059252987760641/389eea7f9cc148fd39fe8b948fd4303f.webp)
需要设置新的密码
重置密码后,发现出现以下错误:
![](https://file.jishuzhan.net/article/1761059252987760641/4ddab257eff78b058ea90ba107acaf1a.webp)
原因分析:是因为我配置了安装步骤的第二步,需要邮箱,按照官网修改配置,安装Postfix以发送通知电子邮件。如果要使用其他解决方案发送电子邮件,请跳过此步骤并在安装GitLab后配置外部SMTP服务器
2.1 Docker 安装
2.1.1 安装镜像和创建容器
-
拉取gitlab、redis、postgresql,gitlab依赖redis和postgresql。
shell#docker pull sameersbn/redis #docker pull sameersbn/postgresql docker pull gitlab/gitlab-ce:latest
-
创建postgresql、redis容器
shell#创建数据目录 mkdir -p /usr/soft/postgresql #创建容器 docker run --name gitlab-postgresql -itd --privileged=true \ --publish 5432:5432 \ --env 'DB_USER=gitlab' \ --env 'DB_PASS=gitlab' \ --env 'DB_NAME=gitlabhq_production' \ --env 'DB_EXTENSION=pg_trgm' \ --volume /usr/soft/postgresql:/var/lib/postgresql \ sameersbn/postgresql:latest
shell#创建数据目录 mkdir -p /usr/soft/redis/data #创建容器 docker run --name gitlab-redis -d --privileged=true \ --publish 6379:6379 \ --volume /usr/soft/redis/data:/var/lib/redis \ sameersbn/redis:latest
3.创建gitlab容器
shell#创建数据目录 mkdir -p /usr/soft/gitlab/data mkdir -p /usr/soft/gitlab/logs #创建容器 docker run --name gitlab -d \ --link gitlab-postgresql:postgresql --link gitlab-redis:redisio \ --publish 10022:22 --publish 10088:80 \ --env 'GITLAB_PORT=8899' --env 'GITLAB_SSH_PORT=10022' \ --env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \ --env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \ --env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \ --env 'GITLAB_HOST=192.168.94.130' \ --env 'SMTP_AUTHENTICATION=login' \ --volume /usr/soft/gitlab/data:/home/git/data \ --volume /usr/soft/gitlab/logs:/var/log/gitlab \ gitlab/gitlab-ce:latest
浏览器访问:http://[IP]:10088
初次访问需要等待一段时间。
初始化 gitlab 中的 root 账号密码:
1、登录容器
yacas
docker exec -it -u root gitlab /bin/bash
2、登录GitLab的Rails控制台
yacas
gitlab-rails console
等待一段时间后,可以在控制台中输入命令
![](https://file.jishuzhan.net/article/1761059252987760641/6906366e1169cb24e04d512af226231e.webp)
3、定位到root用户
yacas
user = User.where(id: 1).first
![](https://file.jishuzhan.net/article/1761059252987760641/09c8a8c94878135cf8ab5f23bfa39a9f.webp)
4、修改root密码
yacas
# 执行下面的命令,将 xxxxx 改为自己的密码
user.password='xxxxxx'
# 修改后,保存用密码
user.save
2.1.2 配置gitlab访问地址
yacas
#进入到gitlab容器中
docker exec -it -u root gitlab /bin/bash
#编辑配置文件
vim /etc/gitlab/gitlab.rb
#添加配置信息
external_url 'http://自己的服务地址的名称,可以是内网穿透域名也可以是ip地址'
如果想通过内网穿透地址访问 gitlab ,需要将配置路径内容配置改为 内网穿透的域名。
如果是将GitLab部署到云服务上,需要配置公网ip地址,无需配置内网穿透。
2.1.3 gitlab 容器中的命令
下面的命令需要进入到 gitlab 容器中执行。
1.初始化配置
时间比较久...,需要耐心等待..., 不要做任何操作
shell
gitlab-ctl reconfigure
2.其他命令:
shell
# gitlab 服务操作 服务操作
# 初始化配置 gitlab
gitlab-ctl reconfigure
# 启动 gitlab 服务
gitlab-ctl start
# 停止 gitlab 服务
gitlab-ctl stop
3 GitLab使用介绍 【了解】
3.1 前期配置
大家注意,一般这些配置是需要公司的领导如CTO等人去配置的,初级开发人员是没有这个权限的。
3.1.0 修改显示主题为中文
主页面找到左上角菜单,选择 Edit profile,如下:
![](https://file.jishuzhan.net/article/1761059252987760641/03d6da6ddf08bdc3e80eef53912b542d.webp)
下面的组中选择为中文
![](https://file.jishuzhan.net/article/1761059252987760641/6513830ba32ede245318d60e98ee9cee.webp)
在偏好设置中修改本地语言并保存
![](https://file.jishuzhan.net/article/1761059252987760641/5e8467f5dfe5af85af53281678f34781.webp)
3.1.1 创建 group(规范)
所有班级创建的组名要遵循组名规范:
yacas
规范:项目名称或案例名称+班级编号+group+组标号
下面已黑马JavaEE 133班级学成项目为例子
示例:
学成在线项目组的命名
第一组:xuecheng133_group1
创建组示例如下:
进入用户组
![](https://file.jishuzhan.net/article/1761059252987760641/48e650536d7b9c216983a7c737e69a7e.webp)
创建组
![](https://file.jishuzhan.net/article/1761059252987760641/c0c4e310db6ed42a4f2fb4b6ce0c9536.webp)
按照组的命名规范创建组名称
![](https://file.jishuzhan.net/article/1761059252987760641/b1c1fb821b1f14f99ef11ad2f7155f14.webp)
![](https://file.jishuzhan.net/article/1761059252987760641/599c60d055348c9327a088a26ebe3c71.webp)
3.1.3 创建用户
3.1.3.1 单个创建
班级小组组长将组员信息录入到GitLab中,小组组长信息由教师先添加到GitLab中。
进入到用户管理中心
![](https://file.jishuzhan.net/article/1761059252987760641/91ec37251a005d61011f5f8850e2c9d6.webp)
填写用户账号信息,并在该页面下方保存用户信息
![](https://file.jishuzhan.net/article/1761059252987760641/a8d6de1dd91119e9a742554592efd441.webp)
创建后点击编辑修改用户的密码
![](https://file.jishuzhan.net/article/1761059252987760641/840a1303bfdb65e2dfdac999cbe9bbfc.webp)
添加用户的密码
![](https://file.jishuzhan.net/article/1761059252987760641/fb1d47f4560b8b357356f5581a094149.webp)
3.1.3.2 将用户添加到组中
进入之前创建的组中
![](https://file.jishuzhan.net/article/1761059252987760641/33ecc7b4bfc0281af3e2262477a4b162.webp)
进入到选中的组管理中
![](https://file.jishuzhan.net/article/1761059252987760641/12105a0d228efbc3b8a9fc561edb3b3b.webp)
编辑组信息
![](https://file.jishuzhan.net/article/1761059252987760641/f179120ae3148f16c5422d0918c602e0.webp)
选中新添加用户信息,并选择为开发者角色
![](https://file.jishuzhan.net/article/1761059252987760641/accfa7fffc1c6219b23700e8d26faff2.webp)
PS:不同的组角色拥有不同的权限,角色权限在本文章最后。
添加成员到组中
![](https://file.jishuzhan.net/article/1761059252987760641/668850d5da8c303967f5282948e4ab06.webp)
![](https://file.jishuzhan.net/article/1761059252987760641/f2168b179932fad60aade3900061c889.webp)
3.2 创建项目
组长进入到组管理界面后,点击创建组中的项目,如下:
![](https://file.jishuzhan.net/article/1761059252987760641/3be9948848689c87bb8f5f1b4c50b2df.webp)
创建组的空项目
![](https://file.jishuzhan.net/article/1761059252987760641/8aa6975c46a8bdffce30db56bda76037.webp)
创建后的组项目,小组要将本组中的项目上传到自己组中。
![](https://file.jishuzhan.net/article/1761059252987760641/e75bd5c908dcb8868ad3fe013b067f09.webp)
3.3 SSH 协议
Gitlab 可以通过 http 的方式可以上传和下载代码,这种方式可以用户的账号和密码。此方式在这里就不过多介绍了,下面将介绍使用 SSH 协议来操作 Gitlab 上的项目。
3.3.1 SSH协议概述
SSH 为 Secure Shell (安全外壳协议)的缩写,由 IETF 的网络小组(Network Working Group)
所制定。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用
SSH 协议可以有效防止远程管理过程中的信息泄露问题。
3.3.2 基于密匙的安全验证
使用 ssh 协议通信时,推荐使用基于密钥的验证方式。你必须为自己创建一对密匙,并把公
**用密匙放在需要访问的服务器上。**如果你要连接到 SSH 服务器上,客户端软件就会向服务
器发出请求,请求用你的密匙进行安全验证。服务器收到请求之后,先在该服务器上你的主
目录下寻找你的公用密匙,然后把它和你发送过来的公用密匙进行比较。如果两个密匙一致,
服务器就用公用密匙加密"质询"(challenge)并把它发送给客户端软件。客户端软件收到
"质询"之后就可以用你的私人密匙解密再把它发送给服务器。
3.3.3 SSH密钥生成
密钥生成的方式有很多种,常见的jdk的工具或者是git bash等。本教程使用GitBash
-
鼠标右键打开GitBash客户端
-
git bash 执行命令,生命公钥和私钥
shellssh-keygen -t rsa
执行命令完成后,在 window本地用户.ssh目录 C:\Users\用户名\ .ssh下面
生成如下名称的公钥和私钥:
![](https://file.jishuzhan.net/article/1761059252987760641/3414eb1eab4c4b658b68cd64737c95ec.webp)
3.3.4 SSH密钥配置
密钥生成后需要在 gitlab 上配置密钥本地才可以顺利访问。
![](https://file.jishuzhan.net/article/1761059252987760641/efbfe9eab98eb45636ed29dcd308a25e.webp)
设置成功后, 我们就可以使用 SSH的形式上传和下载代码了。
![](https://file.jishuzhan.net/article/1761059252987760641/6edb70fe612627cac3284b3d62f06ee5.webp)
![](https://file.jishuzhan.net/article/1761059252987760641/004fa4b04f43a1d8f4e27c977e028204.webp)
shell
git clone git@47.110.238.87:group1/pinyougou_service.git
cd pinyougou_service
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master
完成提交操作。
4 Idea使用GitLab【练习】
下面的方式我们将使用 idea 中通用的操作来上传到 gitlab 中,无需其他的插件。下面方式不仅可以做到向 gitlab 中上传,也可以向 gitee 和 github 中上传。
4.1 上传项目至Gitlab
- 点击 VCS,创建本地仓库'Create Git Repository'
![](https://file.jishuzhan.net/article/1761059252987760641/d3838ef4b993545af8b77d579f763b3a.webp)
- 选择项目的根目录,作为 git 本地仓库的根资源库。
![](https://file.jishuzhan.net/article/1761059252987760641/fa97ab7dba25a887ce279e113988dc13.webp)
- 向项目的根路径下添加 .gitignore 文件忽略不许要上传的文件
![](https://file.jishuzhan.net/article/1761059252987760641/7a20ec49a23d02e5adce785da371f875.webp)
-
在 git 窗口中 local changes 目录中,选择未添加到控制的文件
PS :在下面的列表中看下是否有不许要上传的文件存在,如果有请将排除(.gitignore)或删除
![](https://file.jishuzhan.net/article/1761059252987760641/019ccf8fa300ab179139f3079656e596.webp)
-
在排查好上传文件后,点击绿色 √,将下面文件添加到版本控制中
此次操作会将未添加到版本控制的文件 add 版本控制中,并 commit 到本地仓库里
![](https://file.jishuzhan.net/article/1761059252987760641/9a8debc713d2781e964ca0cce8acac8a.webp)
-
选择文件将文件提交到本地仓库中
将下面的文件选中,并填写提交的备注(备注必须要填写)
将 Before Commit 中的 PerForm code analysis 和 Check TODO 去掉勾选,这样可以加快上传的速度
![](https://file.jishuzhan.net/article/1761059252987760641/35836a7c932b8d3e18ee08e446870d7e.webp)
-
将项目上传到远程仓库 gitlab 中
选中项目的根目录,在 git 菜单栏中选择 Push
![](https://file.jishuzhan.net/article/1761059252987760641/d2be3b32084828cc5ae6839e73e23845.webp)
-
点击 Define remote 在弹出窗口中的 URL 里填写之前的项目地址
PS:保证远端仓库是一个新的仓库
![](https://file.jishuzhan.net/article/1761059252987760641/b13684981b1091cc3fa9662929fb3804.webp)
- 输入账号和密码点击 Log in
![](https://file.jishuzhan.net/article/1761059252987760641/f54b0551233e83d9e2286385d838573a.webp)
点击 Push 进行提交
![](https://file.jishuzhan.net/article/1761059252987760641/0840cdd85167b59bd6f43de6ab29d82e.webp)
- 检查 Git 中是否已经上传到远端仓库地址中
![](https://file.jishuzhan.net/article/1761059252987760641/ed0a21b5dfb8139580ad3894e9ee6c4f.webp)
远端仓库中上传后项目的内容
![](https://file.jishuzhan.net/article/1761059252987760641/3c27d5d3e089b7f89cbaab8d1841932f.webp)
以上我们将自己的项目上传到了 gitlab 组中的项目中,只有本组的人员才可以看到此项目中的内容。
4.2 从Gitlab上拉取项目至本地
关闭项目后,选择导入
![](https://file.jishuzhan.net/article/1761059252987760641/be9b683e7af0744e9280eb5a7036d88a.webp)
输入gitlab对应项目的地址
![](https://file.jishuzhan.net/article/1761059252987760641/b92e915bda27185dd8b64e9adb66425e.webp)
如果显示需要输出账号和密码,请求输入
![](https://file.jishuzhan.net/article/1761059252987760641/93af1aee1ee02b670647beeb6425140f.webp)
修改文件后提交并推送到远程仓库
![](https://file.jishuzhan.net/article/1761059252987760641/ede15ec45d1becfda21b5af52dd6aaad.webp)
![](https://file.jishuzhan.net/article/1761059252987760641/782045be70548d59a53e8c6cec5d0386.webp)
4.3 冲突解决
和git解决冲突一致。
![](https://file.jishuzhan.net/article/1761059252987760641/373fa7581455ac9e4245496668b5e548.webp)
4.4 分支合并
不同模块创建不同的分支,开发者在自己当前的分支下开发代码,等待测试通过之后,需要项目组长leader将所有分支的代码合并到master分支上即可。
gitlab默认是将代码master分支是保护的,所以需要以下设置
![](https://file.jishuzhan.net/article/1761059252987760641/777edd2da8e23fe52c53c4225fa80127.webp)
5 补录
GitLab 用户组中的角色权限图一览
![](https://file.jishuzhan.net/article/1761059252987760641/8d001db4fd51d5c325660159e53c5de5.webp)
![](https://file.jishuzhan.net/article/1761059252987760641/29baddfdc12223af1f297779fcb261bf.webp)