一.gitlab 介绍
git、gitlab、github三者的区别 :
git:是一种基于命令的版本控制系统,全命令操作,没有可视化界面
gitlab:是一个基于git实现的在线代码仓库软件,提供web可视化管理界面,通常用于企业团队内部协作开发
github:是一个基于git实现的在线代码托管仓库,亦提供可视化管理界面,同时免费账户和提供付费账户,提供开放和私有的仓库,大部分的开源项目都选择github作为代码托管仓
二. git 使用介绍
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 "123@qq.com"
[root@node1 /git]# git config --global usre.name "xiaoxi"
[root@node1 /git]# cat /root/.gitconfig
[user]
email = 123@qq.com
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 <file>..." 撤出暂存区)
#
# 新文件: 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 <123@qq.com>
Date: Tue Oct 29 10:52:39 2019 +0800
new create file3
commit eb308111ec80761fadad54d3b78523b9508a0ee7
Author: xiaoxi <123@qq.com>
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]#
测试逻辑图如下
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 <123@qq.com>
Date: Thu Oct 31 15:16:00 2019 +0800
creat tag v1.1
commit a43c4fd723087fac112580be8ed89bf2e10d2c95
Merge: 09dbacb fbab84d
Author: xiaoxi <123@qq.com>
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 <123@qq.com>
Date: Thu Oct 31 15:39:29 2019 +0800
create tag v1.2
commit a43c4fd723087fac112580be8ed89bf2e10d2c95
Merge: 09dbacb fbab84d
Author: xiaoxi <123@qq.com>
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 "123@163.com"
2.初始化本地git仓库:git init
3.本地主机公钥,复制到远程仓库
4.关联远程仓库:git remote add origin git@gitee.com: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 "123@163.com"
2.初始化本地git仓库:git init
3.本地主机公钥,复制到远程仓库
4.将码云上的最新代码克隆到本地:git clone git@gitee.com: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'] = '17301246994@163.com'
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****6994@163.com"
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使用
1、将本地ssh公钥放到gitlab上
2、在本地将远程项目克隆到本地
[root@m01 /mnt]# git clone git@gitlab.public.com: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 "admin@example.com"
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 #查看分支结构