Gitlab使用

一.gitlab 介绍

git、gitlab、github三者的区别 :

git:是一种基于命令的版本控制系统,全命令操作,没有可视化界面

gitlab:是一个基于git实现的在线代码仓库软件,提供web可视化管理界面,通常用于企业团队内部协作开发

github:是一个基于git实现的在线代码托管仓库,亦提供可视化管理界面,同时免费账户和提供付费账户,提供开放和私有的仓库,大部分的开源项目都选择github作为代码托管仓


二. git 使用介绍

git 有三个存储空间分别是本地、暂存区、本地仓库
三者关系如下:

Gitlab使用_第1张图片
git模式.

(1) 搭建好yum源使用yum 安装即可:

yum install -y git 

(2) git 初始化目录为git仓库

git 安装完成之后指定一个目录进行初始化操作

[root@node1 /]# mkdir git
[root@node1 /]# cd git/
[root@node1 /git]# git config --global user.email "[email protected]"
[root@node1 /git]# git config --global usre.name "xiaoxi"
[root@node1 /git]# cat /root/.gitconfig 
[user]
    email = [email protected]
    name = xiaoxi
[root@node1 /git]# 
[root@node1 /git]# git init
初始化空的 Git 版本库于 /git/.git/

三. git使用

1、 文件提交

(1)本地文件提交到暂存区

[root@node1 /git]# git add .  #将本地文件同步至缓存区
[root@node1 /git]# git status #查看当前状态
# 位于分支 master
#
# 初始提交
#
# 要提交的变更:
#   (使用 "git rm --cached ..." 撤出暂存区)
#
#   新文件:    file1
#   新文件:    file2
#

(2)暂存区文件提交到本地仓库

[root@node1 /git]# git commit -m "new update file2" #将暂存区文件提交到本地仓库
[master(根提交) eb30811] new update file2
 2 files changed, 1 insertion(+)
 create mode 100644 file1
 create mode 100644 file2

2、文件比对

(1)本地文件与暂存区做比对

[root@node1 /git]# git diff file1 #本地文件与暂存区文件做比对
[root@node1 /git]# git diff file1
diff --git a/file1 b/file1
index e69de29..5f2f16b 100644
--- a/file1
+++ b/file1
@@ -0,0 +1 @@
+1111
[root@node1 /git]# 

(2) 暂存区文件与本地仓库做比对

[root@node1 /git]# git diff --cached file1  #暂存区与本地仓库进行比对
diff --git a/file1 b/file1
new file mode 100644
index 0000000..5f2f16b
--- /dev/null
+++ b/file1         #b表示更新后的文件
@@ -0,0 +1 @@
+1111             #+表示新增,-表示删除

3、文件回滚(回退)

(1)本地文件改错了,进行撤回(回滚)

实际就是用暂存区的文件覆盖掉本地的文件

[root@node1 /git]# echo "22222" >> file1 
[root@node1 /git]# cat file1 
1111
22222
[root@node1 /git]# git checkout file1 #撤销本地文件修改
[root@node1 /git]# cat file1 
1111
[root@node1 /git]# 

(2) 本地文件提交到暂存区后进行撤回(回滚)

实际就是用本地仓库的文件覆盖掉暂存区的文件

[root@node1 /git]# echo "3333" >> file1 
[root@node1 /git]# cat file1 
1111
3333
[root@node1 /git]# git add file1
[root@node1 /git]# git reset HEAD file1 #将提交到了暂存区的文件进行回滚
重置后撤出暂存区的变更:
M   file1
[root@node1 /git]# git diff file1
diff --git a/file1 b/file1
index 5f2f16b..13f6fea 100644
--- a/file1
+++ b/file1
@@ -1 +1,2 @@
 1111
+3333
[root@node1 /git]# 

(3)暂存区文件提交到本地仓库进行撤回(回滚)操作

[root@node1 /git]# git commit  -m "update file1 444" 
[master b9bf79a] update file1 444
 1 file changed, 1 insertion(+)
[root@node1 /git]# git diff --cached file1
[root@node1 /git]# git reflog #查看文件更新日志
b9bf79a HEAD@{0}: commit: update file1 444   
ecce689 HEAD@{1}: reset: moving to ecce689710b180a67376dfccd541b65067e58537
080d6e3 HEAD@{2}: commit: update file1
ecce689 HEAD@{3}: commit: new create file3
eb30811 HEAD@{4}: commit (initial): new update file2
[root@node1 /git]# git reset --hard ecce689  #通过查看日志的commitID号来确定回滚到某一位置
HEAD 现在位于 ecce689 new create file3
[root@node1 /git]# cat file1 
1111
[root@node1 /git]# 

4、查看commitID号或日志

(1)查看详细信息

[root@node1 /git]# git log
commit ecce689710b180a67376dfccd541b65067e58537
Author: xiaoxi <[email protected]>
Date:   Tue Oct 29 10:52:39 2019 +0800

    new create file3

commit eb308111ec80761fadad54d3b78523b9508a0ee7
Author: xiaoxi <[email protected]>
Date:   Tue Oct 29 09:52:27 2019 +0800

    new update file2
[root@node1 /git]# 

(2)查看简化信息

[root@node1 /git]# git reflog 
ecce689 HEAD@{0}: reset: moving to ecce689
b9bf79a HEAD@{1}: commit: update file1 444
ecce689 HEAD@{2}: reset: moving to ecce689710b180a67376dfccd541b65067e58537
080d6e3 HEAD@{3}: commit: update file1
ecce689 HEAD@{4}: commit: new create file3
eb30811 HEAD@{5}: commit (initial): new update file2
[root@node1 /git]# 

5、git分支管理

分支介绍:分支就好像科幻电影里的平行宇宙,当你在使用一个分支的时候,别人在使用另外一个分支,两个分支同时有人使用,但是又互不影响
多人操作一定不要在master分支进行文件修改,否则提交时会造成文件冲突,建议开辟新的分支进行更新操作,最后提交到master分支上来,进行代码(文件)合并

(1) 创建分支

[root@node1 /git]# git branch dev #创建dev分支
[root@node1 /git]# git branch #查看分支信息,查看过程中* 号在哪里你就在那个分支中
  dev
* master
[root@node1 /git]# 

(2) 切换分支

[root@node1 /git]# git checkout dev #切换到dev分支
切换到分支 'dev'
[root@node1 /git]# git branch 
* dev
  master
[root@node1 /git]# 

测试 :在dev分支执行的操作,是否会提交给master分支,测试如下:

[root@node1 /git]# git checkout dev #将分支切换到dev分支
切换到分支 'dev'
[root@node1 /git]# git branch   #查看当前所在分支
* dev
  master
[root@node1 /git]# ls
file1  file2  file3
[root@node1 /git]# touch file4 #创建文件
[root@node1 /git]# ls #查看当前dev分支存在的文件
file1  file2  file3  file4
[root@node1 /git]# git add . #将dev分支创建的文件提交到暂存区
[root@node1 /git]# git commit -m "touch file4" #将devf分支暂存区的文件提交到本地仓库
[dev 5200260] touch file4
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file4
[root@node1 /git]# git checkout master #将分支切换到master分支上来
切换到分支 'master'
[root@node1 /git]# ls #查看结果并未出现file4文件
file1  file2  file3
[root@node1 /git]# 
测试结果:在其他分支所做的操作不会提交到master分支上来

(3)分支合并完整流程

[root@node1 /git]# git branch  #查看当前所在分支
  dev
* master
[root@node1 /git]# git checkout dev #切换到dev 分支
切换到分支 'dev'
[root@node1 /git]# ls #查看dev分支下当前所有文件
file1  file2  file3  file4
[root@node1 /git]# touch file5 #在dev分支下创建file5 
[root@node1 /git]# git add . #提交到dev分支的暂存区
[root@node1 /git]# git commit -m "new touch file5" #dev分支的暂存区提交到本地仓库
[root@node1 /git]# git checkout master #切换到master分支
切换到分支 'master'
[root@node1 /git]# git branch  #查看所在分支
  dev
* master
[root@node1 /git]# touch file6  #在master分支上创建file6 
[root@node1 /git]# ls
file1  file2  file3  file6
[root@node1 /git]# git checkout dev #切换到dev分支
切换到分支 'dev'
[root@node1 /git]# git merge master -m "update master to dev" #将master分支上的更新内容提交到dev分支,使数据同步
Already up-to-date.
[root@node1 /git]# ls #查看同步后的文件
file1  file2  file3  file4  file5  file6

[root@node1 /git]# git checkout master #再次切回到master分支
切换到分支 'master'
[root@node1 /git]# git merge dev -m "update dev to master " #最终将dev分支上的更新操作,最后提交到master分支上,准备进行代码上线
更新 fbab84d..a43c4fd
Fast-forward (no commit created; -m option ignored)
 file4 | 0
 file5 | 0
 2 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file4
 create mode 100644 file5
[root@node1 /git]# ls #传看同步完成后的master分支上的信息
file1  file2  file3  file4  file5  file6

使用 git log --oneline 查看merge信息

[root@node1 /git]# git log --oneline
a43c4fd Merge branch 'master' into dev
fbab84d new touch file6
09dbacb touch file5
5200260 touch file4
ecce689 new create file3
eb30811 new update file2
[root@node1 /git]#

测试逻辑图如下

Gitlab使用_第2张图片
git分支合并关系图.png

git分支合并使用完整流程:

1.只要需要提交,请先更新  ,  然后在进行 提交操作.
2.一个人使用一个分支独立开发,最终要合并到master时:
    (1).dev开发,dev开发完成.
    (2).切换master分支,拉取远程master分支代码
    (3).切换本地dev分支, 合并本地master分支至本地dev分支
    (4).将本地dev合并到本地master,然后将本地master提交至远程master

6、git标签管理

(1)创建及查看commitID 标签

使用方法:git tag -a "标签名称" -m "描述"

[root@node1 /git]# git tag -a "v1.1" -m "creat tag v1.1" #给当前最新的commitID 添加标签
[root@node1 /git]# git show v1.1 #查看添加的标签及commitID
tag v1.1
Tagger: xiaoxi <[email protected]>
Date:   Thu Oct 31 15:16:00 2019 +0800

creat tag v1.1

commit a43c4fd723087fac112580be8ed89bf2e10d2c95
Merge: 09dbacb fbab84d
Author: xiaoxi <[email protected]>
Date:   Wed Oct 30 14:43:54 2019 +0800

    Merge branch 'master' into dev

[root@node1 /git]# git log

[root@node1 /git]# git tag -a "v1.2" a43c4fd -m "create tag v1.2" #给指定的commitID添加标签
[root@node1 /git]# git show v1.2 #查看标签
tag v1.2
Tagger: xiaoxi <[email protected]>
Date:   Thu Oct 31 15:39:29 2019 +0800

create tag v1.2

commit a43c4fd723087fac112580be8ed89bf2e10d2c95
Merge: 09dbacb fbab84d
Author: xiaoxi <[email protected]>
Date:   Wed Oct 30 14:43:54 2019 +0800

    Merge branch 'master' into dev

[root@node1 /git]# 

(2)删除标签

[root@node1 /git]# git tag -d v1.1
已删除 tag 'v1.1'(曾为 036887b)
[root@node1 /git]# 

四. 本地git 关联远程仓库2种方法

git关联远程仓库方法(1)

1.添加全局配置
git config --global user.name "xiaoming"
git config --global user.email "[email protected]"
2.初始化本地git仓库:git init
3.本地主机公钥,复制到远程仓库
4.关联远程仓库:git remote add origin [email protected]:commit_id/tes.git
5.保持本地仓库版本和远程仓库保持一致:git pull origin master
6.将本地仓库更新文件同步至远程仓库

git add  .
git  commit -m  " to update "
git tag -a "v1.1" -m "creat tag v1.1"      #给当前最新的commitID 添加标签
git push -u origin master 

git关联远程仓库方法(2)

1.添加全局配置
git config --global user.name "xiaoming"
git config --global user.email "[email protected]"
2.初始化本地git仓库:git init
3.本地主机公钥,复制到远程仓库
4.将码云上的最新代码克隆到本地:git clone [email protected]:commit_id/tes.git
5.将本地仓库更新文件同步至远程仓库

 git add  .
git  commit -m  " to update "
git tag -a "v1.1" -m "creat tag v1.1"      #给当前最新的commitID 添加标签
git push -u origin master 

五. gitlab 上线部署

1.解决依赖问题

yum install -y curl openssh-server postfix wget 

2.下载gitlab软件包,并安装
下载地址:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/

[root@node1 /server/tools]# rpm -ivh gitlab-ce-12.0.3-ce.0.el7.x86_64.rpm 

3.编辑配置文件vim /etc/gitlab/gitlab.rb

external_url 'http://gitlab.public.com' 设置访问的URL
grafana['enable'] = false #关闭grafana功能(出图工具)
prometheus['enable'] = false  #关闭prometheus功能()
邮箱配置:
gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = '[email protected]'
gitlab_rails['gitlab_email_display_name'] = 'Public-Gitlab'

gitlab_rails['smtp_enable'] = true #开启邮箱
gitlab_rails['smtp_address'] = "smtp.163.com" #使用邮箱地址
gitlab_rails['smtp_port'] = 25       #使用邮箱端口
gitlab_rails['smtp_user_name'] = "173****[email protected]" 
gitlab_rails['smtp_password'] = "客户端授权码"
gitlab_rails['smtp_domain'] = "163.com" 
gitlab_rails['smtp_authentication'] = "login" 
gitlab_rails['smtp_enable_starttls_auto'] = true  #tls加密
gitlab_rails['smtp_tls'] = true #开启tls方式

4.初始化

[root@node1 /etc/gitlab]# gitlab-ctl reconfigure

初始化完成后各服务组件就已经启动,无需再次启动
如果是本地使用需要修改hosts文件,将gitlab服务器ip和域名做绑定,然后直接访问即可,首次登陆需要设置密码,默认用户名为root

    gitlab 软件使用说明
    gitlab-ctl status 查看各服务启动的
    gitlab-ctl stop 服务名
    gitlab-ctl stop  后面不跟任何服务名,表示停止所有的gitlab组件
    gitlab-ctl start 后面不跟服务名,表示启动所有gitlab组件
    

5.汉化

1.必须首次登陆一下
2.停止gitlab服务
3.替换汉化资源包
4.启动gitlab服务
5.汉化后需等待一分钟  不然会报502错误
6.配合系统的中文语言一起使用
[root@node1 /server/tools]# \cp -r gitlab-12-0-stable-zh/* /opt/gitlab/embedded/service/gitlab-rails/

六.gitlab使用

Gitlab使用_第3张图片
gitlab使用指引.png

1、将本地ssh公钥放到gitlab上
2、在本地将远程项目克隆到本地

[root@m01 /mnt]# git clone [email protected]:root/rainbow.git
Cloning into 'rainbow'...
remote: Enumerating objects: 28, done.
remote: Counting objects: 100% (28/28), done.
remote: Compressing objects: 100% (16/16), done.
remote: Total 28 (delta 8), reused 25 (delta 7)
Receiving objects: 100% (28/28), done.
Resolving deltas: 100% (8/8), done.
[root@m01 /mnt/rainbow]# config --global user.name "Administrator"
[root@m01 /mnt/rainbow]# config --global user.email "[email protected]"

3、这里有两条命令需要经常用到

执行完1、2 步后

注意想要提交到远程master上,需要先将远程最新代码同步至本地,保持commitID 相同,然后再讲本地更新同步至远程。也就是先要执行pull操作,然后再push.

git push orgin master :将本地master分支上的信息推到远程master
 git pull orgin master :将远程master上信息同步到本地master

4、gitlab 备份

备份:
        1.配置备份的路径,备份的周期( vim /etc/gitlab/gitlab.rb)
        gitlab_rails['manage_backup_path'] = true
        gitlab_rails['backup_path'] = "/data/gitlab/backups"
        gitlab_rails['backup_keep_time'] = 604800
        
        2.创建对应的目录
        mkdir /data/gitlab/backups -p
        
        3.重新初始化gitlab
        gitlab-ctl reconfigure
        
        4.执行备份命令 (自动存放至/data/gitlab/backups目录中)
        gitlab-rake gitlab:backup:create
        
        5.将备份命令加入crond即可.
        00 02 * * * gitlab-rake gitlab:backup:create &>/dev/null
        
注意:备份完成后,不要修改备份完成后的文件名

5、gitlab恢复

    
    恢复:
    
        1.停止主程序
            gitlab-ctl stop unicorn
            gitlab-ctl stop sidekiq
            
        2.恢复此前备份的内容
            gitlab-rake gitlab:backup:restore BACKUP=1572083359_2019_10_26_12.0.3_gitlab_backup
    

6、gitlab升级


    升级:
        https://www.xuliangwei.com/bgx/803.html
        
        1.基于当前12.0的版本进行一次快照
        2.下载较新的gitlab版本进行升级
        3.升级后,测试能否正常访问
        4.下载对应的汉化包,进行汉化,下载地址 https://gitlab.com/xhang/gitlab
        5.如果长时间无法启动,  gitlab-ctl tail -f 
    

总结:git常用命令汇总

    git init                        # 初始化本地目录为一个git仓库
    git config --global user.name   #  表名我是谁
    git config --global user.email  #  表名我的邮箱什么
    git add .                       # 将本地目录推荐至暂存区
    git commit                      # 将暂存区内容提交至本地仓库
    git diff                        # 本地目录与暂存区比对  
    git diff --cached               #   暂存区域本地仓库比对
    git reset HEAD file1            #将提交到了暂存区的文件进行回滚    
    git reset --hard  ID            #通过查看日志后的commitID号来确定回滚到某一位置                 
    git merge                       # 合并分支  
    git checkout                    # 切换分支
    git branch                      # 创建分支 或者查看分支
    git log                         # 查看日志
    git reflog                      # 查看所有的日志
    git tag                         # 打标签
    git push orgin                  # 只能推送本地仓库已提交的内容, 至远程仓库
    git pull  orgin                 # 下载远程仓库内容至本地仓库
    git clone                       # 克隆远程仓库,至本地
    git remote                      # 添加  删除  本地仓库 与远程仓库的联系
    git show                        # git show v1.0  查看标签和commitID的关系
    git log --graph                 #查看分支结构

你可能感兴趣的:(Gitlab使用)