gitlab私有仓库搭建 & 代码拉取上传

1.什么是gitlab#

Copy
1.Git是一种版本控制系统,是一种工具,用于代码的存储和版本控制。 2.GitHub是一个基于Git实现的在线代码仓库,是目前全球最大的代码托管平台,可以帮助程序员之间互相交流和学习。 3.GitLab是一个基于Git实现的在线代码仓库软件,你可以用GitLab自己搭建一个类似于GitHub一样的仓库, 但是GitLab有完善的管理界面和权限控制,一般用于在企业、学校等内部网络搭建Git私服。 4.GitHub和GiLlab两个都是基于Web的Git远程仓库,它们都提供了分享开源项目的平台, 为开发团队提供了存储、分享、发布和合作开发项目的中心化云存储的场所。从代码的私有性上来看,GitLab 是一个更好的选择。 但是对于开源项目而言,GitHub依然是代码托管的首选。

2.上传包#

Copy
# 安装包可参考清华源或阿里源下载:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/ [root@git ~]# rz gitlab-ce-10.2.2-ce.0.el7.x86_64.rpm # 官网:https://about.gitlab.com/ 安装环境: 1、 CentOS 6或者7 2、 2G内存(实验)生产(至少4G) 3、 安装包:gitlab-ce-10.2.2-ce 4、 禁用防火墙,关闭selinux

3.安装包#

Copy
#使用rpm安装,缺少依赖 [root@git ~]# rpm -ivh gitlab-ce-10.2.2-ce.0.el7.x86_64.rpm warning: gitlab-ce-10.2.2-ce.0.el7.x86_64.rpm: Header V4 RSA/SHA1 Signature, key ID f27eab47: NOKEY error: Failed dependencies: policycoreutils-python is needed by gitlab-ce-10.2.2-ce.0.el7.x86_64 #安装依赖 [root@git ~]# yum install -y policycoreutils-python #再次安装 [root@git ~]# rpm -ivh gitlab-ce-10.2.2-ce.0.el7.x86_64.rpm

4.配置gitlab#

Copy
[root@git ~]# vim /etc/gitlab/gitlab.rb external_url 'http://10.0.0.80'

5.重新生成#

Copy
#修改配置文件以后重新生成 [root@git ~]# gitlab-ctl reconfigure /var/opt/gitlab/ # 配置文件 /etc/gitlab/gitlab.rb # 配置文件地址 /opt/gitlab/ # gitlab的程序安装目录 /var/opt/gitlab # gitlab目录数据目录 /var/opt/gitlab/git-dfata # 存放仓库数据 gitlab-ctl status # 查看目前gitlab所有服务运维状态 gitlab-ctl stop # 停止gitlab服务 gitlab-ctl stop nginx # 单独停止某个服务 gitlab-ctl tail # 查看所有服务的日志

6.gitlab组成#

Copy
[root@git ~]# gitlab-ctl status run: gitaly: (pid 9873) 137s; run: log: (pid 9529) 207s run: gitlab-monitor: (pid 9889) 136s; run: log: (pid 9630) 195s run: gitlab-workhorse: (pid 9862) 137s; run: log: (pid 9483) 221s #轻量级的反向代理服务器 run: logrotate: (pid 9513) 213s; run: log: (pid 9512) 213s #日志管理工具 run: nginx: (pid 9496) 219s; run: log: (pid 9495) 219s #web服务,web页面 run: node-exporter: (pid 9581) 201s; run: log: (pid 9580) 201s run: postgres-exporter: (pid 9908) 135s; run: log: (pid 9725) 176s run: postgresql: (pid 9263) 285s; run: log: (pid 9262) 285s #数据库 run: prometheus: (pid 9897) 136s; run: log: (pid 9695) 182s #监控 run: redis: (pid 9203) 291s; run: log: (pid 9202) 291s #缓存 run: redis-exporter: (pid 9647) 188s; run: log: (pid 9646) 188s run: sidekiq: (pid 9467) 227s; run: log: (pid 9466) 227s #后台的任务队列(异步执行) run: unicorn: (pid 9429) 233s; run: log: (pid 9428) 233s #动态web服务

7.常用命令#

Copy
#查看gitlab状态 [root@git ~]# gitlab-ctl status #启动gitlab的服务 [root@git ~]# gitlab-ctl start nginx #停止gitlab的服务 [root@git ~]# gitlab-ctl stop nginx #查看服务日志 [root@git ~]# gitlab-ctl tail nginx

8.浏览器访问#

Copy
#访问 http://10.0.0.80 先修改默认密码:12345678 #登录 默认的用户名:root 密码:12345678

二、gitlab使用#

1.外观设置#

在登录界面增加自定义图片及文字

2.关闭注册接口#

默认登录界面可用户自行注册并实现登录,但在公司中需要禁止用户自行注册,注册功能需经审批流程通过放可。所以在此将登录界面中的注册功能对外关闭。

3.汉化版配置#

Copy
1、下载汉化补丁 git clone https://gitlab.com/xhang/gitlab.git 2、查看全部分支版本 git branch -a 3、对比版本、生成补丁包 git diff remotes/origin/10-2-stable remotes/origin/10-2-stable-zh > ../ 10.2.2-zh.diff 4、停止服务器 gitlab-ctl stop 5、打补丁 patch -d /opt/gitlab/embedded/service/gitlab-rails -p1 < /tmp/10.2.2-zh.diff 6、启动和重新配置 gitlab-ctl start gitlab-ctl reconfigure

4.添加用户组#


5.添加用户#




6.把用户添加到用户组#


7.创建项目#

注意:默认创建的项目,只能对创建用户所在组用户有权限操作。如需其他普通用户对项目进行拉取,需要将其他普通
用户的组加入到项目中。如下图中,使用普通用户登录也可查看对应项目



8.推送和拉取项目#

1)移除github的仓库#

Copy
[root@git git_data]# git remote remove origin [root@git git_data]# git remote

2)添加gitlab的仓库#

Copy
[root@git git_data]# git remote add origin git@10.0.0.80:dev/git_data.git [root@git git_data]# git remote origin # 查看当前分支的远端仓库地址 [root@git git_data]# git remote -v

3)推送代码#

Copy
#将公钥配置到gitlab仓库


Copy
[root@git git_data]# git push -u origin master Branch master set up to track remote branch master from origin. Everything up-to-date

4)页面查看#

5)克隆代码#

Copy
[root@git git_data]# cd /tmp/ #克隆代码 [root@git tmp]# git clone git@10.0.0.80:dev/git_data.git Cloning into 'git_data'... remote: Counting objects: 31, done. remote: Compressing objects: 100% (19/19), done. remote: Total 31 (delta 2), reused 0 (delta 0) Receiving objects: 100% (31/31), done. Resolving deltas: 100% (2/2), done. #查看 [root@git tmp]# ll total 0 drwx------ 2 git git 20 Sep 22 01:00 gitaly-ruby831479196 drwxr-xr-x 3 root root 59 Sep 22 02:10 git_data

6)拉取代码#

Copy
#创建仓库 [root@git opt]# mkdir git_data [root@git opt]# cd git_data/ #初始化仓库 [root@git git_data]# git init Initialized empty Git repository in /opt/git_data/.git/ #拉取代码 [root@git git_data]# git pull git@10.0.0.80:dev/git_data.git remote: Counting objects: 31, done. remote: Compressing objects: 100% (19/19), done. remote: Total 31 (delta 2), reused 0 (delta 0) Unpacking objects: 100% (31/31), done. From 10.0.0.80:dev/git_data * branch HEAD -> FETCH_HEAD #查看 [root@git git_data]# ll total 8 -rw-r--r-- 1 root root 4 Sep 22 02:13 3 -rw-r--r-- 1 root root 12 Sep 22 02:13 master -rw-r--r-- 1 root root 0 Sep 22 02:13 test_gihub

9.设置保护主分支#

在实际中,一般不允许开发人员对分支进行合并到主分支,只能使用分支提交到gitlab中,再gitlab中进行申请
分支合并到主分支,交由管理员用户审批。
下面将实现做了分支保护之后各用户将代码上传到不同分支情况
结果:

  • 普通用户无法将master分支中的代码进行上传
  • 普通用户只能使用其他分支对代码进行上传
  • 普通用户如需将代码上传到主分支,只能使用普通分支对代码进行上传,再在页面中申请进行分支合并主分支
  • 管理员用户可以对主分支代码进行上上传和合并操作
  • 使用普通用户上传代码到master分支
Copy
1.找一台新机器 2.使用新机器生成密钥对 3.将密钥对使用普通用户记录到gitlab 4.克隆代码 5.修改代码 [root@zabbix git_data]# echo 12312123123 > haoda 6.设置全局用户 [root@zabbix git_data]# git config --global user.email "123@qq.com" [root@zabbix git_data]# git config --global user.name "haoda" # 此操作是将远端代码库命名为origin,后面直接调用origin就可使用 [root@zabbix git_data]# git remote add origin git@10.0.0.80:dev/git_data.git [root@zabbix git_data]# git config --list 7.提交代码到远程仓库 [root@zabbix git_data]# git add haoda [root@zabbix git_data]# git commit -m "使用普通用户提交到master分支" [root@zabbix git_data]# git push -u origin master 8.查看仓库 查看结果:普通用户直接将代码提交到了master主分支,不安全,于是需要在管理员用户中进行下面图片中的操作
  • 分支保护



  • 再次使用普通用户将代码提交到master分支

Copy
1.再次修改代码 [root@zabbix git_data]# echo 123123123 > haoda3 2.提交代码 [root@zabbix git_data]# git add haoda3 [root@zabbix git_data]# git commit -m "配置完分支保护使用普通用户提交代码" [root@zabbix git_data]# git push -u origin master  Counting objects: 4, done.  Compressing objects: 100% (2/2), done.  Writing objects: 100% (3/3), 319 bytes | 0 bytes/s, done.  Total 3 (delta 1), reused 0 (delta 0)  remote: GitLab: You are not allowed to push code to protected branches on this project.  To git@10.0.0.80:dev/git_data.git   ! [remote rejected] master -> master (pre-receive hook declined)  error: failed to push some refs to 'git@10.0.0.80:dev/git_data.git' 3.提交代码被拒绝,没被允许
  • 使用管理员用户将代码提交至master分支
Copy
1.先拉取代码(修改代码前,习惯性先拉取新代码在进行修改) [root@git git_data]# git pull git@10.0.0.80:dev/git_data.git 2.修改代码 [root@git git_data]# echo 123456 > haoda2 3.推送代码到远程仓库  [root@git git_data]# git add haoda2  [root@git git_data]# git commit -m "使用管理用户推送代码带master分支"  [root@git git_data]# git remote  origin  [root@git git_data]# git push -u origin master 4.使用管理用户提交是没有问题的
  • 使用普通用户向普通用户提交代码
Copy
1.创建一个普通分支 [root@zabbix git_data]# git branch test 2.切换到普通分支 [root@zabbix git_data]# git checkout test 3.再次修改代码 [root@zabbix git_data]# echo 12312312312 >> haoda3 4.提交代码到新分支 [root@zabbix git_data]# git add haoda3  [root@zabbix git_data]# git commit -m "使用普通用户向普通分支提交代码"  [test f8bd225] 使用普通用户向普通分支提交代码   1 file changed, 1 insertion(+)  [root@zabbix git_data]# git push -u origin test 5.查看提交的代码 页面结果:提交成功

下面将实现普通用户代码申请合并主分支,一般第一次会直接在此处显示,如果未找到,可以参考图二

  • 图二:


  • 使用管理员用户登录查看合并请求


  • 查看合并成功

10.git-gui的使用#

专门为开发人员准备

Copy
0. 安装:傻瓜式安装,直接使用工具一直下一步就行 1.鼠标右键--> Git bash Here 2.配置全局变量,指定用户和邮箱

Copy
windows密钥对生成

Copy
1.针对开发人员操作,把公钥加入gitlab,当然是普通用户的gitlab 2.鼠标右键--> Git Gui Here

Copy
选择克隆


  • 拉取后查看文件
  • 创建一个文件
Copy
1.使用页面上传代码 Rescan #搜索有更新的代码 Stage Changed #上传到暂存区 Sign Off #提交到本地仓库前添加的注释 Commit #提交到本地仓库 Push #提交到远程仓库 注意:因为之前已经设置了分支保护,普通用户无法将代码上传到master分支中,只能创建新的分支,然后进行上传


  • 报错,因为普通用户无法向master分支提交代码

  • 创建新的分支

  • 再次提交,先切换至其他分支

  • 页面进行合并

11.gitlab备份#

  • 1.备份
Copy
对gitlab进行备份将会创建一个包含所有库和附件的归档文件。对备份的恢复只能恢复到与备份时的gitlab相同的版本。将gitlab迁移到另一台服务器上的最佳方法就是通过备份和还原。 gitlab提供了一个简单的命令行来备份整个gitlab,并且能灵活的满足需求。 备份文件将保存在配置文件中定义的backup_path中,文件名为TIMESTAMP_gitlab_backup.tar,TIMESTAMP为备份时的时间戳。TIMESTAMP的格式为:EPOCH_YYYY_MM_DD_Gitlab-version。 如果自定义备份目录需要赋予git权限。 1) 配置gitlab [root@git git_data]# vim /etc/gitlab/gitlab.rb #开启备份 gitlab_rails['manage_backup_path'] = true #备份文件的目录 gitlab_rails['backup_path'] = "/backup/gitlub" #备份文件的权限 gitlab_rails['backup_archive_permissions'] = 0644 #备份文件保留的时间(单位是秒) gitlab_rails['backup_keep_time'] = 604800 备份保留的时间(以秒为单位,这个是七天默认值 2)创建备份目录 [root@git git_data]# mkdir /backup/gitlub -p #授权 [root@git git_data]# chown -R git.git /backup/gitlub/ 3)gitlab重新生成 [root@git git_data]# gitlab-ctl reconfigure 4)手动备份 #先拉取最新代码 [root@git git_data]# git pull git@10.0.0.80:dev/git_data.git #备份 [root@git git_data]# gitlab-rake gitlab:backup:create 5)检查备份 [root@git git_data]# ll /backup/gitlub/ total 512 -rw-r--r-- 1 git git 522240 Sep 23 00:49 1600793349_2020_09_23_10.2.2_gitlab_backup.tar 6) 自动备份 #写脚本结合定时任务

2.误删除数据

Copy
注意:gitlab只能恢复相同版本的代码 1) 代码拉取 [root@git git_data]# git pull git@10.0.0.80:dev/git_data.git 2) 误删除代码 [root@git git_data]# rm -rf ./* [root@git git_data]# git add -A [root@git git_data]# git commit -m "故意误删除数据" [root@git git_data]# git push -u origin master 3) 恢复数据 - 停止相关服务 [root@git git_data]# gitlab-ctl stop unicorn ok: down: unicorn: 0s, normally up [root@git git_data]# gitlab-ctl stop sidekiq ok: down: sidekiq: 0s, normally up [root@git git_data]# gitlab-ctl status 4) 使用备份数据恢复数据 #查看备份的文件 [root@git git_data]# ll /backup/gitlub/ total 1024 -rw-r--r-- 1 git git 522240 Sep 23 00:49 1600793349_2020_09_23_10.2.2_gitlab_backup.tar -rw-r--r-- 1 git git 522240 Sep 23 00:50 1600793421_2020_09_23_10.2.2_gitlab_backup.tar [root@git git_data]# gitlab-rake gitlab:backup:restore BACKUP=1600793421_2020_09_23_10.2.2 5)启动服务 [root@git git_data]# gitlab-ctl start sidekiq ok: run: sidekiq: (pid 33707) 0s [root@git git_data]# gitlab-ctl start unicorn ok: run: unicorn: (pid 33724) 1s [root@git git_data]# gitlab-ctl status 6) 查看恢复数据 直接在页面中进行查看
posted @   元气少女郭德纲!!  阅读(4404)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示
CONTENTS