前言:
Gitlab 是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的 Git 项目仓库,可通过Web 界面进行访问公开的或者私人的项目 Gitlab 拥有与 Github 类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,他非常易于浏览提交过的版本并提供一个文件历史库。他还提供一个代码片段收集功能可以轻松实现代码复用,便于日后有需要的时候进行查找
博文大纲:
一、环境准备
二、安装部署gitlab
三、远端库的基本操作
四、重置gitlab管理员密码
一、环境准备
如果是测试环境,其内存建议2G及以上,可以去清华开源镜像站下载所需gitlab版本,其安装后,会自动安装nginx提供web界面,所以要避免80端口占用。
二、安装部署gitlab
1、安装gitlab
[root@git src]# wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-11.9.8-ce.0.el7.x86_64.rpm
[root@git ~]# rpm -ivh gitlab-ce-11.9.8-ce.0.el7.x86_64.rpm #安装rpm包
#由于我不打算做域名解析,所以需要修改其配置文件
[root@git ~]# vim /etc/gitlab/gitlab.rb
external_url 'http://192.168.20.2' #将原本的域名改为本机IP
[root@git ~]# gitlab-ctl reconfigure #重新配置gitlab,就算不修改配置文件,也需要在安装后重新配置gitlab
[root@git ~]# netstat -anpt | grep -w 80 #确定nginx在监听80端口
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 3872/nginx: master
2、配置gitlab
客户端访问服务器的IP地址,可以看到以下界面(配置密码并登陆):
上传服务器公钥(接下来的操作与在github上大同小异),先在服务器上生成密钥对:
[root@git ~]# ssh-keygen -t rsa -C "[email protected]"
#执行上述命令生成秘钥对,一路回车即可,后面是自己的邮箱
[root@git ~]# cat ~/.ssh/id_rsa.pub #查看生成的公钥并复制其内容
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCVUbmw+PC2plXMviNBA6YKgWx+1419uMPJhJNGeZ8Mi7njBlAyhfzWQsCFamQqU4nwSMWua3oEJZEiT6ZRgLQQyYwZ+DESQCyhAJYdtOgwtRh3XaIgAASzlqZ0hIjhhwi+pD/GjktySiW/UvaiqkkBgfdXCuXlSH7R8T4PoRCpYZ92OwQmMV/blGd/SXLDCaqHlgz1K8As8HFoaFAkrmS+jSio616+w2o8ly2PBbVoZa129BD8SQ81KAs5drGTD2OsKHFx08rS5izSc2MKLjet7+00CXJebwZQLB1LS/TUXwrPAHLQO8ZN8AYCsoIv6coEYRhW93BoBZ8Swetys/KD [email protected]
然后回到web界面:
添加后如下:
创建一个库:
回到服务器上进行克隆刚刚创建的库:
[root@git ~]# git clone [email protected]:root/test01.git #克隆
[root@git ~]# cd test01/ #进入克隆的库
[root@git test01]# ls #该目录下的东西和刚刚web页面创建好库后的内容一样
README.md
#自报家门
[root@git test01]# git config --global user.name "test"
[root@git test01]# git config --global user.email "[email protected]"
#向远端库上传文件进行测试
[root@git test01]# echo "aaaaaaaaa" > test.txt
[root@git test01]# git add test.txt
[root@git test01]# git commit -m "alter from 192.168.20.2"
[root@git test01]# git push origin master #推送到远端库
刷新web界面的库页面:
三、远端库的基本操作
当你从远端仓库克隆时,实际上git自动把本地的master分支和远端的master分支对应起来了,并且远程仓库的默认名称是origin。
要查看远程库的信息,使用以下命令:
[root@git test01]# git remote #简略信息
origin
[root@git test01]# git remote -v #详细信息
origin [email protected]:root/test01.git (fetch)
origin [email protected]:root/test01.git (push)
推送分支:
[root@git test01]# git push origin master #推送本地的master分支
[root@git test01]# git push origin dev #推送本地的dev分支,若远端没有dev分支,会自动创建
抓取分支:
[root@git test01]# git pull origin dev #根据提示将远端的dev分支抓取下来
当我们从远程库克隆时,默认情况下,只能看到master分支,可以使用git branch命令确认。
解决多人协作容易产生的问题
当我们整个小组对同一个分支进行开发时,如果在你提交之前,你的同事已经修改了分支的内容并推送到远端仓库,而碰巧你也对同样的文件做了修改,并试图推送,那么会推送失败,因为你的同事的最新提交的数据和你试图提交的数据有冲突(你本地的内容比远端仓库的旧了),解决的办法会在提示你推送失败的返回信息中给出,这里我们模拟一下这一过程。
#进入另一个目录,克隆远端仓库,模拟多人协作
[root@git test01]# cd /tmp
[root@git tmp]# git clone [email protected]:root/test01.git
[root@git test01]# git checkout -b dev #创建一个分支dev并进入
[root@git test01]# echo "aaaaaaaaa" > tmp.txt
[root@git test01]# git add tmp.txt
[root@git test01]# git commit -m "commmit from /tmp"
[root@git test01]# git push origin dev #将新修改的内容推送到远端
回到web界面进行刷新,即可看到新提交的分支:
上面的操作是在/tmp目录下进行操作的,那么现在操作/root目录下的远程仓库:
#进入root目录下的远程仓库并创建dev分支,推送内容至远端仓库
[root@git test01]# cd /root/test01/
[root@git test01]# git checkout -b dev
[root@git test01]# echo "bbbbbbbbbb" > root.txt
[root@git test01]# git add root.txt
[root@git test01]# git commit -m "commit from /root"
[root@git test01]# git push origin dev #此时我们推送,就会提示以下错误
To [email protected]:root/test01.git
! [rejected] dev -> dev (fetch first)
error: 无法推送一些引用到 '[email protected]:root/test01.git'
提示:更新被拒绝,因为远程版本库包含您本地尚不存在的提交。这通常是因为另外
提示:一个版本库已推送了相同的引用。再次推送前,您可能需要先合并远程变更
提示:(如 'git pull')。
提示:详见 'git push --help' 中的 'Note about fast-forwards' 小节。
#提示远程版本库有我们本地版本库没有的提交,所以需要先将远端版本库pull下来,再提交
[root@git test01]# git pull origin dev #根据提示将远端的dev分支pull下来
[root@git test01]# ls #我们在/tmp目录下提交的文件就存在了
README.md root.txt test.txt tmp.txt
[root@git test01]# git push origin dev #然后再次将本地的dev分支推送到gitlab,即可成功
此时,web界面的dev分支就有了我们在/tmp目录和/root目录下提交的所有内容,如下:
但是master分支,仍然是最初的文件,如下:
现在进行远程版本库的分支合并,如下:
[root@git test01]# git checkout master #切换至master分支
[root@git test01]# git merge dev #合并dev分支
[root@git test01]# ls #查看合并后的分支下内容
README.md root.txt test.txt tmp.txt
#提交到本地版本库
[root@git test01]# git pull #下载远端版本库
[root@git test01]# git add *
[root@git test01]# git commit -m "提交"
[master 3717c1c] 提交
[root@git test01]# git push origin master #推送到远端版本库
现在已经拥有了dev分支的所有内容,那么接下来就演示如何删除远程版本库的dev分支:
[root@git test01]# git branch -d dev #删除本地的dev分支
[root@git test01]# git branch -r -d origin/dev #删除指定的远程分支
[root@git test01]# git push origin :dev #将删除的分支提交到远程版本库中
至此,远端版本库中的dev分支就被删除了,如下:
四、重置gitlab管理员密码
[root@git ~]# gitlab-rails console production #执行该命令,只有第一个命令字可以tab出来
-------------------------------------------------------------------------------------
GitLab: 11.9.8 (48528bc)
GitLab Shell: 8.7.1
postgresql: 9.6.11
-------------------------------------------------------------------------------------
Loading production environment (Rails 5.0.7.1)
irb(main):001:0> user = User.where(id: 1).first
=> #
irb(main):003:0> user.password='test1234'
=> "test1234"
irb(main):004:0> user.password_confirmation='test1234'
=> "test1234"
irb(main):005:0> user.save
Enqueued ActionMailer::DeliveryJob (Job ID: 17d6f678-3cae-4de2-be59-b19a6d22b9fa) to Sidekiq(mailers) with arguments: "DeviseMailer", "password_change", "deliver_now", #>
=> true
irb(main):006:0> true
=> true
irb(main):007:0> exit
至此,再次登录,就需要使用新密码test1234进行登录了。