Git是版本控制系统;Github是在线的基于Git的代码托管服务,GitHub同时提供付费账户和免费账户;Gitlab 创建免费的私人repo。
Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
Git 是基于Linux 内核开发而开发的一个开放源码的版本控制软件。
Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。
1,git与svn区别:
GIT是分布式的,SVN不是:这是GIT和其它非分布式的版本控制系统,例如SVN,CVS等,最核心的区别。
GIT把内容按元数据方式存储,而SVN是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似.svn,.cvs等的文件夹里。
GIT分支和SVN的分支不同:分支在SVN中一点不特别,就是版本库中的另外的一个目录。
GIT没有一个全局的版本号,而SVN有:目前为止这是跟SVN相比GIT缺少的最大的一个特征。
GIT的内容完整性要优于SVN:GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。
2,git的工作流程
1,克隆 Git 资源作为工作目录。
2,在克隆的资源上添加或修改文件。
3,如果其他人修改了,你可以更新资源。
4,在提交前查看修改。
5,提交修改。
6,在修改完成后,如果发现错误,可以撤回提交并再次修改并提交。
git的工作区、暂存区和版本库
工作区:就是你在电脑里能看到的目录。
暂存区:英文叫stage, 或index。一般存放在"git目录"下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
图中左侧为工作区,右侧为版本库。在版本库中标记为 "index" 的区域是暂存区(stage, index),标记为 "master" 的是 master 分支所代表的目录树。
图中 "HEAD" 实际是指向 master 分支的一个"游标"。所以图示的命令中出现 HEAD 的地方可以用 master 来替换。
图中的 objects 标识的区域为 Git 的对象库,实际位于 ".git/objects" 目录下,里面包含了创建的各种对象及内容。
当对工作区修改(或新增)的文件执行 "git add" 命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。
当执行提交操作(git commit)时,暂存区的目录树写到版本库(对象库)中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。
当执行 "git reset HEAD" 命令时,暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响。
当执行 "git rm --cached " 命令时,会直接从暂存区删除文件,工作区则不做出改变。
当执行 "git checkout ." 或者 "git checkout -- " 命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区的改动。
当执行 "git checkout HEAD ." 或者 "git checkout HEAD " 命令时,会用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。
1,yum安装
[root@192 ~]#yum -y install git (yum会自动解决安装包之间的依赖关系)
或者yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel git-core
[root@192 ~]#git --version #查看版本号
git version 1.8.3.1
2,windows平台安装
在 Windows 平台上安装 Git 同样轻松,有个叫做 msysGit 的项目提供了安装包,可以到 GitHub 的页面上下载 exe 安装文件并运行:
安装包下载地址:https://gitforwindows.org
完成安装之后,就可以使用命令行的 git 工具(已经自带了 ssh 客户端)了,另外还有一个图形界面的 Git 项目管理工具。
在开始菜单里找到"Git"->“Git Bash”,会弹出 Git 命令窗口,你可以在该窗口进行 Git 操作。
1,Git 提供了一个叫做 git config 的工具,专门用来配置或读取相应的工作环境变量。
2,这些环境变量,决定了 Git 在各个环节的具体工作方式和行为。这些变量可以存放在以下三个不同的地方:
3,/etc/gitconfig 文件:系统中对所有用户都普遍适用的配置。若使用 git config 时用 --system 选项,读写的就是这个文件。
4,~/.gitconfig 文件:用户目录下的配置文件只适用于该用户。若使用 git config 时用 --global 选项,读写的就是这个文件。
5,当前项目的 Git 目录中的配置文件(也就是工作目录中的 .git/config 文件):这里的配置仅仅针对当前项目有效。每一个级别的配置都会覆盖上层的相同配置,所以 .git/config 里的配置会覆盖 /etc/gitconfig 中的同名变量。
6,在 Windows 系统上,Git 会找寻用户主目录下的 .gitconfig 文件。主目录即 $HOME 变量指定的目录,一般都是 C:\Documents and Settings$USER。
此外,Git 还会尝试找寻 /etc/gitconfig 文件,只不过看当初 Git 装在什么目录,就以此作为根目录来定位。
1,git用户信息
[root@192 ~]#git config --global user.name "shuai"
[root@192 ~]#git config --global user.email "[email protected]"
[root@192 ~]# git config --list
user.name=shuai
user.email=[email protected]
[root@192 ~]#cat ~/.gitconfig
[user]
name = shuai
email = [email protected]
2,git使用
[root@192 ~]#ssh-keygen #一直回车
[root@192 ~]#cat .ssh/id_rsa.pub #查看公钥内容
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCraymQIsIhoAdCqunTkyOKTEgLu4pVHE6bEWQX5iboWyJdWB27TMMbF3Ujd9JTcMS7eDg68LDL08wx9ruqzUoyTCifJTjzLscaKU8vVLspuwE+Eu/ezUqKeGC+D/JvHShouyFjf/ZGonjy49vsxrz61Pnw6dOro1CPyMeRaKnLHnhXzxaUTtc/nTen9ui2bICQyjTNs+G3N29+P+GDVJ/1+zx/VSopBd93/o6pC+wtfh8zNAjaPCbS8EV9Qdu3fmQARFdx7rj1wXV9AYc8B0FS5RBrvu7nzamIA69KgmpTH3wO+mTFuGIq/w7fy8ZU8J5AJV/34eBG/pqI0t8iYVVJ [email protected]
示例如下:
1,将公钥内容复制一下到github里面个人中心–设置–SSH和GPG密钥
2,创建一个自定义仓库
下载远程github的仓库到本地服务器
[root@192 ~]# git clone [email protected]:chenshuai1314/school.git
正克隆到 'school'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
接收对象中: 100% (3/3), done.
[root@192 ~]# ls
anaconda-ks.cfg school
3,本地项目与远程项目之间的交互
[root@192 ~]# mkdir haha #创建一个本地的代码库目录
[root@192 ~]# cd haha/ #切换到目录下
[root@192 haha]# git init #初始化
初始化空的 Git 版本库于 /root/haha/.git/
[root@192 haha]# git remote add origin [email protected]:chenshuai1314/school.git #添加远程项目地址(可从项目主页ssh地址复制)
[root@192 haha]# echo 1 > 1.txt #创建文档
[root@192 haha]# echo 2 > 2.txt
[root@192 haha]# ls
1.txt 2.txt
[root@192 haha]# git add 1.txt #添加文件1到git的暂存区
[root@192 haha]# git add 2.txt
或者git add . #添加所有的文件到git暂存区
[root@192 haha]# git commit -m 'banben1' #提交到本地的版本库(版本库自定义)
[master(根提交) 8a2e40f] banben1
2 files changed, 2 insertions(+)
create mode 100644 1.txt
create mode 100644 2.txt
[root@192 haha]# git push -u origin master #将本地的修改的代码库提交到远程服务器
Counting objects: 4, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (4/4), 240 bytes | 0 bytes/s, done.
Total 4 (delta 0), reused 0 (delta 0)
remote:
remote: Create a pull request for 'master' on GitHub by visiting:
remote: https://github.com/chenshuai1314/school/pull/new/master
remote:
To [email protected]:chenshuai1314/school.git
[new branch] master -> master
分支 master 设置为跟踪来自 origin 的远程分支 master。
4,常用的git命令
[root@192 ~]# git --help
最常用的 git 命令有:
add 添加文件内容至索引
bisect 通过二分查找定位引入 bug 的变更
branch 列出、创建或删除分支
checkout 检出一个分支或路径到工作区
clone 克隆一个版本库到一个新目录
commit 记录变更到版本库
diff 显示提交之间、提交和工作区之间等的差异
fetch 从另外一个版本库下载对象和引用
grep 输出和模式匹配的行
init 创建一个空的 Git 版本库或重新初始化一个已存在的版本库
log 显示提交日志
merge 合并两个或更多开发历史
mv 移动或重命名一个文件、目录或符号链接
pull 获取并合并另外的版本库或一个本地分支
push 更新远程引用和相关的对象
rebase 本地提交转移至更新后的上游分支中
reset 重置当前HEAD到指定状态
rm 从工作区和索引中删除文件
show 显示各种类型的对象
status 显示工作区状态
tag 创建、列出、删除或校验一个GPG签名的 tag 对象
[root@192 ~]# git init #初始化
[root@192 ~]# git add 1.txt #将该文件添加到暂存区
[root@192 ~]# git add . #将所有文件添加到暂存区
[root@192 ~]# git commit -m 'banben' #将暂存区的文件保存成为某一版本,版本自定义
[root@192 ~]# git log #查看所有的版本日志
[root@192 ~]# git status #查看现在暂存区的状况
[root@192 ~]# git diff #查看现在文件与上一个提交commit版本的区别
[root@192 ~]# git reset --hard HEAD^ #回到上一版本
[root@192 ~]# git reset --hard xxxx #xxxx为版本编号,回到这个编号的版本
[root@192 ~]# git pull origin master #从主分支pull到本地
[root@192 ~]# git push -u origin master #从本地代码库push上传到远程库主分支
1,版本回退
[root@192 haha]# git log #查看所有版本
commit 45bf79eb308ac3f418a42f03ba2b9b169ff678ef
Author: shuai <[email protected]>
Date: Wed May 11 21:40:15 2022 +0800
note
commit 8a2e40f1aad7ed056378e39157f3e40385353c1a
Author: shuai <[email protected]>
Date: Wed May 11 21:27:16 2022 +0800
banben1
[root@192 haha]# git reflog #查看命令历史版本
45bf79e HEAD@{0}: commit: note
8a2e40f HEAD@{1}: commit (initial): banben1
[root@192 haha]# git reset --hard HEAD^ #退回到上一个版本
HEAD 现在位于 8a2e40f banben1
[root@192 haha]# git reset --hard 8a2e40f #退回到指定编号版本
[root@192 haha]# git log #查看现存版本
commit 8a2e40f1aad7ed056378e39157f3e40385353c1a
Author: shuai <[email protected]>
Date: Wed May 11 21:27:16 2022 +0800
banben1
2,分支管理
[root@192 haha]# git checkout -b dev #创建dev分支,并切换到dev分支下
切换到一个新分支 'dev'
[root@192 haha]# git branch #查看当前分支,以及所在分支
* dev
master
[root@192 haha]# git branch tong #常见新的分支tong
[root@192 haha]# git branch #查看所有分支
* dev
master
tong
[root@192 haha]# git checkout tong #切换到分支tong
切换到分支 'tong'
3,分支合并
[root@192 haha]# git branch
dev
* master
tong
[root@192 ~]# git merge dev #把dev分支的工作成果合并到master分支上
[root@192 ~]# git branch -d dev #删除dev分支
[root@192 haha]# git branch #分支dev已经没有了
[root@192 ~]# useradd git
[root@192 ~]# passwd git
[root@192 ~]# mkdir /git-root
[root@192 ~]# cd /git-root
[root@192 git-root]# git init --bare shell.git
初始化空的 Git 版本库于 /git-root/shell.git/
[root@192 git-root]# chown -R git.git shell.git/
[root@192 git-root]# ssh-copy-id [email protected]
....
Now try logging into the machine, with: "ssh '[email protected]'"
and check to make sure that only the key(s) you wanted were added.
[root@192 git-root]# cd /opt/
[root@192 opt]# git clone [email protected]:/git-root/shell.git/
正克隆到 'shell'...
warning: 您似乎克隆了一个空版本库。
[root@192 opt]# ls
shell
[root@192 opt]# cd shell/
[root@192 shell]# ls -a
. .. .git
[root@192 shell]# touch long
[root@192 shell]# git add long
[root@192 shell]# git commit -m 'banben1'
[master(根提交) 72f9a90] banben1
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 long
[root@192 shell]# git push origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 201 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To [email protected]:/git-root/shell.git/
* [new branch] master -> master
[root@192 shell]# ls
long
[root@192 shell]# git branch
* master
注意:git init 和 git init –bare 的区别:
使用--bare选项时,不再生成.git目录,而是只生成.git目录下面的版本历史记录文件,这些版本历史记录文件也不再存放在.git目录下面,而是直接存放在版本库的根目录下面.
用"git init"初始化的版本库用户也可以在该目录下执行所有git方面的操作。但别的用户在将更新push上来的时候容易出现冲突。
使用”git init –bare”方法创建一个所谓的裸仓库,之所以叫裸仓库是因为这个仓库只保存git历史提交的版本信息,而不允许用户在上面进行各种git操作,如果你硬要操作的话,只会得到下面的错误(”This operation must be run in a work tree”)这个就是最好把远端仓库初始化成bare仓库的原因
github远程代码仓库与本地连接的大致流程:
github注册账户--github创建仓库--本地服务器生成ssh公钥--github添加ssh公钥
1,修改主机名
[root@192 ~]# hostnamectl set-hostname gitlab
2,关闭防火墙和selinux
略
3,本地主机解析(可做可不做)
[root@gitlab ~]# cat /etc/hosts127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.222.132 www.haha.com
C:\Windows\System32\drivers\etc (windows做域名解析)
打开hosts尾部添加:192.168.222.132 www.haha.com
4,开启邮件服务
[root@gitlab ~]#systemctl start postfix
[root@gitlab ~]#systemctl enable postfix
5,安装gitlab依赖包
[root@gitlab ~]#yum install -y curl openssh-server openssh-clients postfix cronie policycoreutils-python
7,添加gitlab安装源(根据需求选择一种即可)
阿里源
[root@gitlab ~]# vim /etc/yum.repos.d/gitlab.repo
[gitlab-ce]
name=gitlab-ce
baseurl=http://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7
Repo_gpgcheck=0
Enabled=1
gpgcheck=0
清华源:
[root@gitlab ~]# vim /etc/yum.repos.d/gitlab.repo
[gitlab-ce]
name=Gitlab CE Repository
baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/
gpgcheck=0
enabled=1
8,安装gitlab(选择ce)
[root@gitlab ~]#yum -y install gitlab-ce #会安装最新版本,软件较大接近1G
[root@gitlab ~]#head -1 /opt/gitlab/version-manifest.txt
gitlab-ce 13.6.1
9,gitlab配置登录链接
[root@gitlab ~]#vim /etc/gitlab/gitlab.rb
...
external_url 'http://192.168.222.132' #可以填ip地址或者域名
[root@gitlab ~]#grep "^external_url" /etc/gitlab/gitlab.rb
external_url 'http://192.168.222.132'
10,gitlab初始化(第一次配置时间较长)
[root@gitlab ~]# gitlab-ctl reconfigure
11,启动gitlab服务(涉及的服务组件比较多)
[root@gitlab ~]#gitlab-ctl start
12,登录gitlab
浏览器输入http://192.168.222.132,就进入登陆界面,默认登录用户是root
password密码操作设置:
[root@gitlab ~]#gitlab-rails console -e production
出现交互界面后执行:u=User.where(id:1).first (u定义为root用户)
设置root密码, 注意需要符合密码强度:u.password='Qianfeng@123'
密码确认输入:u.password_confirmation='Qianfeng@123'
保存:u.save!
退出交互界面:quit
注意:修改默认端口
l如果需要手工修改nginx的port ,可以在gitlab.rb中设置 nginx['listen_port'] = 8000 ,
然后再次 gitlab-ctl reconfigure即可
gitlab设置https安全登录部署
1,创建私有密钥
[root@gitlab ~]#mkdir -p /etc/gitlab/ssl #递归创建目录
[root@gitlab ~]#openssl genrsa -out "/etc/gitlab/ssl/www.haha.com.key" 2048 #创建私钥
Generating RSA private key, 2048 bit long modulus
...............+++
...............................................................................+++
e is 65537 (0x10001)
2,创建私有证书
[root@gitlab ~]#openssl req -new -key "/etc/gitlab/ssl/www.haha.com.key" -out "/etc/gitlab/ssl/www.haha.com.csr"
......进入交互界面
Country Name (2 letter code) [XX]:cn #cn中国
State or Province Name (full name) []:sh #名字自定义
Locality Name (eg, city) [Default City]:sh #城市自定义
Organization Name (eg, company) [Default Company Ltd]: #直接回车
Organizational Unit Name (eg, section) []: #直接回车
Common Name (eg, your name or your server's hostname) []:gitlab.example.com
Email Address []:www.haha.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:123456 #密码自定义
An optional company name []: #直接回车
完成了!!!
[root@gitlab ~]#ll /etc/gitlab/ssl
-rw-r--r-- 1 root root 1066 Jan 2 15:32 gitlab.example.com.csr
-rw-r--r-- 1 root root 1679 Jan 2 15:30 gitlab.example.com.key
3,建CRT签署证书
利用私有密钥和私有证书创建CRT签署证书
[root@gitlab ~]#openssl x509 -req -days 365 -in "/etc/gitlab/ssl/www.haha.com.csr" -signkey "/etc/gitlab/ssl/www.haha.com.key" -out "/etc/gitlab/ssl/www.haha.com.crt"
...
Signature ok
subject=/C=cn/ST=sh/L=sh/O= /OU= /CN=gitlab.example.com/[email protected]
Getting Private key
[root@gitlab ~]#ll /etc/gitlab/ssl/
total 12
-rw-r--r-- 1 root root 1265 Jan 2 15:39 gitlab.example.com.crt
-rw-r--r-- 1 root root 1066 Jan 2 15:32 gitlab.example.com.csr
-rw-r--r-- 1 root root 1679 Jan 2 15:30 gitlab.example.com.key
4,创建pem证书
利用openssl命令输出pem证书
[root@gitlab ~]#openssl dhparam -out /etc/gitlab/ssl/dhparam.pem 2048 #不用改直接复制
...pem证书生成需要点时间....
5,查看生成的证书
[root@gitlab ~]# ll /etc/gitlab/ssl/
total 16
-rw-r--r-- 1 root root 424 Jan 2 15:46 dhparam.pem
-rw-r--r-- 1 root root 1265 Jan 2 15:39 gitlab.example.com.crt
-rw-r--r-- 1 root root 1066 Jan 2 15:32 gitlab.example.com.csr
-rw-r--r-- 1 root root 1679 Jan 2 15:30 gitlab.example.com.key
6,更改文件权限
[root@gitlab ~]#chmod 600 /etc/gitlab/ssl/*
[root@gitlab ~]#l /etc/gitlab/ssl/
total 16
-rw------- 1 root root 424 Jan 2 15:46 dhparam.pem
-rw------- 1 root root 1265 Jan 2 15:39 gitlab.example.com.crt
-rw------- 1 root root 1066 Jan 2 15:32 gitlab.example.com.csr
-rw------- 1 root root 1679 Jan 2 15:30 gitlab.example.com.key
7,配置gitlab
[root@gitlab ~]#cp /etc/gitlab/gitlab.rb{,.bak}
或者cp /etc/gitlab/gitlab.rb /etc/gitlab/gitlab.rb.bak
[root@gitlab ~]#vim /etc/gitlab/gitlab.rb
\## 更改如下
32行 external_url 'https://www.haha.com' #变成https://域名
1398行 nginx['redirect_http_to_https'] = true #改成true
1410行 nginx['ssl_certificate'] = "/etc/gitlab/ssl/www.haha.com.crt" #改www.haha.com
1411行 nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/www.haha.com.key" #改www.haha.com
8,初始化gitlab相关服务器配置
[root@gitlab ~]#gitlab-ctl reconfigure
Starting Chef Client, version 13.6.4
resolving cookbooks for run list: ["gitlab"]
Synchronizing Cookbooks:
\- gitlab (0.0.1)
\- package (0.1.0)
\- postgresql (0.1.0)
...
gitlab Reconfigured!
出现这个表示配置没有问题!
9,nginx配置(可选项,配置失败的解决方案)
[root@gitlab ~]#cp /var/opt/gitlab/nginx/conf/gitlab-http.conf{,.bak}
[root@gitlab ~]#vim /var/opt/gitlab/nginx/conf/gitlab-http.conf
[如果可以正常访问,这里可以不做配置]
37 server_name www.haha.com;
38 rewrite ^(.*)$ https://$host$1 permanent;
10,启动gitlab
[root@gitlab ~]#gitlab-ctl restart
11,打开游览器登录gitlab
http://www.haha.com (用户名root,密码:Qianfeng@123)
gitlab添加SMTP邮件功能
[root@gitlab ~]#vim /etc/gitlab/gitlab.rb
gitlab_rails['smtp_enable'] = true #改成true
gitlab_rails['smtp_address'] = "smtp.163.com" #改成smtp.163.com
gitlab_rails['smtp_port'] = 465 #465
gitlab_rails['smtp_user_name'] = "[email protected]" #添加自己的邮箱地址
gitlab_rails['smtp_password'] = "FULLECVMSVNBSDJH" #这是邮箱授权码
gitlab_rails['smtp_domain'] = "163.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = '[email protected]'
gitlab_rails['gitlab_email_display_name'] = 'Example'
gitlab_rails['gitlab_email_reply_to'] = '[email protected]'
gitlab_rails['gitlab_email_subject_suffix'] = 'gitlab'
修改完配置文件后保存退出
2,停止gitlab服务
[root@gitlab ~]#gitlab-ctl stop
3,修改配置后需要初始化配置
[root@gitlab ~]#gitlab-ctl reconfigure
4,启动服务
[root@gitlab ~]#gitlab-ctl start
5,gitlab发送邮件测试
[root@gitlab ~]#gitlab-rails console
Loading production environment (Rails 4.2.10)
irb(main):001:0> Notify.test_email('[email protected]', 'Message Subject', 'Message Body').deliver_now
...
qq邮箱会收到新的测试邮件
gitlab创建项目组group
gitlab去掉用户的自动注册功能(安全考虑)
八:gitlab开发代码提交处理流程
1,公司代码提交合并流程简述
1,PM(项目主管/项目经理)在gitlab创建任务,分配给开发人员
2,开发人员领取任务后,在本地使用git clone拉取代码库
3,开发人员创建开发分支(git checkout -b dev),并进行开发
4,开发人员完成之后,提交到本地仓库(git commit )
5,开发人员在gitlab界面上申请分支合并请求(Merge request)
5,PM在gitlab上查看提交和代码修改情况,确认无误后,确认将开发人员的分支合并到主分支(master)
6,开发人员在gitlab上Mark done确认开发完成,并关闭issue。这一步在提交合并请求时可以通过描述中填写"close #1"等字样,可以直接关闭issue
2,创建项目管理用户chenshuai
注意:用户添加完毕后,gitlab 会给用户发一封修改密码的邮件,各用户需要登录自己的邮箱,并点击相关的链接,设置新密码。
4,使用chenshuai用户的身份和密码登录到gitlab界面中,并创建项目project
5,添加服务器ssh公钥
[root@gitlab ~]#useradd chenshuai
[root@gitlab ~]#su - chen
[chenshuai@gitlab ~]$ssh-keygen #一直回车会生成密钥
[chenshuai@gitlab ~]$cat .ssh/id_rsa.pub #查看公钥并复制到gitlab中
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQClOoe0GWUuOKztn3fDlL5l/H+2qaRzLuvY7+cw9b4PzeGDQACeb7P6B2aJz3NA2unB94t3TnY36SqpwKTxtjkDKe8nbvsTDYy62p3KJKf/A+plaoVH7TR+th065OFTnedk5YXekuiKMd3u2FNk8OkYEyk3QLHzqQoDXg4yEXJWtPdaDEfJuPBoUfY4mj5k43Qjbu5LtUWF/gM4K4B7HTkDuS8Mjxo+XBi7Bw+G9OZpZBYADwwLs/VlCRomSnFsXq1H+PalziqmsRRgusUNZ9r3cPEKbhm6jileCzn3BsdspUKm+IJEFWdgF7xuBfpTurgYwMhApnEwbOEXJ9gweehv chenshuai@gitlab
[chenshuai@gitlab ~]$git config --global user.name "tom"
[chenshuai@gitlab ~]$git config --global user.email "[email protected]"
[chenshuai@gitlab ~]$git clone [email protected]:zu1/zhoulong1.git
[chenshuai@gitlab ~]$ cd zhoulong1/
[chenshuai@gitlab zhoulong1]$ ls
ceshi README.md
7,创建新文件和内容,并提交到dev分支到远程gitlab中zhoulong1里面
[chenshuai@gitlab zhoulong1]$ echo 222 > ceshi
[chenshuai@gitlab zhoulong1]$ git checkout -b dev
切换到一个新分支 'dev'
[chenshuai@gitlab zhoulong1]$ git branch
* dev
haha
main
[chenshuai@gitlab zhoulong1]$ git add ceshi
[chenshuai@gitlab zhoulong1]$ git commit -m 'banben'
[haha ae25b81] banben
1 file changed, 1 insertion(+), 1 deletion(-)
[chenshuai@gitlab ~]$git push -u origin dev
然后进入gitlab中的zhoulong1中查看dev分支下ceshi文件
注意:gitlab可以使用自身的配置实现数据备份与恢复
1,查看软件版本和系统版本
[root@gitlab ~]#cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
13.6.1
[root@gitlab ~]#cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
13.6.1
2,数据备份
查看备份相关的配置项
[root@gitlab ~]#vim /etc/gitlab/gitlab.rb
gitlab_rails['manage_backup_path'] = true #开启备份
gitlab_rails['backup_path'] = "/data/gitlab/backups" #指定备份路径
##配置修改完成后gitlab-ctl reconfigure 或者 gitlab-ctl restart 重启服务生效
3,执行备份命令进行备份
[root@gitlab ~]#/opt/gitlab/bin/gitlab-rake gitlab:backup:create
4,添加到 crontab 中定时执行
[root@gitlab ~]#crontab -e
0 2 * * * bash /opt/gitlab/bin/gitlab-rake gitlab:backup:create
可以到/data/gitlab/backups找到备份包,解压查看,会发现备份的还是比较全面的,数据库、repositories、build、upload等分类还是比较清晰的。
5,设置备份保留时长
防止每天执行备份,有目录被爆满的风险,打开/etc/gitlab/gitlab.rb配置文件,找到如下配置:
[[email protected] ~]# vim /etc/gitlab/gitlab.rb
gitlab_rails['backup_keep_time'] = 604800
设置备份保留7天(7360024=604800),秒为单位,如果想增大或减小,可以直接在该处配置,并通过gitlab-ctl restart 重启服务生效。
备份完成,会在备份目录中生成一个当天日期的tar包。
6,数据恢复
安装部署gitlab server
具体步骤参见上面:gitlab server 搭建过程
恢复gitlab
7,查看备份相关的配置项
[root@gitlab ~]#vim /etc/gitlab/gitlab.rb
gitlab_rails['backup_path'] = "/data/gitlab/backups"
修改该配置,定义了默认备份出文件的路径,并执行 gitlab-ctl reconfigure 或者 gitlab-ctl restart 重启服务生效。
8,恢复数据前要先停掉数据连接服务
[root@gitlab ~]#gitlab-ctl stop unicorn
[root@gitlab ~]#gitlab-ctl stop sidekiq
如果是台新搭建的主机,不需要操作,理论上不停这两个服务也可以。停这两个服务是为了保证数据一致性。
如果是台新搭建的主机,不需要操作,理论上不停这两个服务也可以。停这两个服务是为了保证数据一致性。
9,同步备份文件到新服务器
将老服务器/data/gitlab/backups目录下的备份文件拷贝到新服务器上的/data/gitlab/backups
[root@gitlab ~]#rsync -avz 1530773117_2019_03_05_gitlab_backup.tar 10.0.1.86:/data/gitlab/backups/ #也可以用scp
注意权限:600权限是无权恢复的。 实验环境可改成了777,生产环境建议修改属主属组
[root@gitlab ~]#cd /data/gitlab/backups
[root@gitlab ~]#chown -R git.git 1530773117_2019_03_05_gitlab_backup.tar
10,执行命令进行恢复
后面再输入两次 yes 就完成恢复了。
[root@gitlab ~]#gitlab-rake gitlab:backup:restore BACKUP=1530773117_2018_07_05_gitlab_backup.tar
注意:backups 目录下保留一个备份文件可直接执行
11,恢复完成启动服务
恢复完成后,启动刚刚的两个服务,或者重启所有服务,再打开浏览器进行访问,发现数据和之前的一致:
[root@gitlab ~]#gitlab-ctl start unicorn
[root@gitlab ~]#gitlab-ctl start sidekiq
或gitlab-ctl restart