本文章重点介绍如下内容:

1、git、gitlab、github的区别

2、gitlab的搭建

3、gitlab的备份

4、gitlab的迁移及数据恢复

所有的操作建立在centos7.3的环境中搭建,gitlab采用的版本为10.2.2


1、git、gitlab、github的区别

和SVN类似,Git是一个版本控制系统(Version Control System,VCS),不同的是SVN为集中式版本控制系统,为单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新,git为分布式版本控制系统,关于SVN和git的对比,可以通过下图进行说明(但最大的区别在于svn为集中式,git为分布式)

    svn好比一个巨大的图书馆,当你要借一本书的时候,需要先从图书馆借出,回家之后自己改,改完之后还是返回给图书馆,而git的方式完全不同,所有的客户端都一个是完整的版本库,没有中央控制的概念,可以这样类比,git提供了一个虚拟的全量图书馆,所有人都有一个虚拟的图书馆,当你想看其中一本书的时候,从自己的虚拟图书馆里面检索出来即可,如果你修改了其中的内容,可以直接提交到自己的虚拟图书馆里面,也不会影响其他人的图书馆,当有其他人想要看你修改的一本书的时候,你只要将对应的一本书的URL发给对方即可。

关于Git的诞生其实很有趣味性,在早期林纳斯·托瓦兹(Linux之父)面临Linux内核版本控制的问题,在最初,接受采用Bitkeeper进行Linux内核的代码管控,但有一个要求,不允许Linux社区开发人员对Bitkeeper进行破解,但对于追求开源软件的×××们,怎么可能这么听话,就有一个×××开发人员,对Bitkeeper进行了破解,基于之前的要求,Bitkeeper收回的林纳斯使用权,在协商无果的情况下,林纳斯闭关修炼7天,git就这样面试了,大神就是大神


Git是版本控制系统,Github是在线的基于Git的代码托管服务。GitHub是2008年由Ruby on Rails编写而成。GitHub同时提供付费账户和免费账户。这两种账户都可以创建公开的代码仓库,但是付费账户也可以创建私有的代码仓库,如果你在GitHub上面开源自己的项目,那么在面试的时候,这将是一个很大的优势和亮点,别人可以通过你在GitHub的开源项目,可以很好的了解到你的技术水平,同时GitHub上面项目的star越高,说明项目的影响力越大,这个很重要


由于GitHub对于私有的代码仓库是收费的,同时,并不是所有的公司会愿意将自己的项目托管在GitHub上面,因此gitlab就是为了解决这类问题的,gitlab搭建在个人的服务器上面,经过认证的人都可以在上面创建免费的私人repo,并进行多人协作。GitLab让开发团队对他们的代码仓库拥有更多的控制。



2、gitlab的搭建

本文搭建的gitlab是基于yum的方式进行安装的,具体的安装步骤如下:

(1)、配置yum源

vim /etc/yum.repos.d/gitlab-ce.repo

(2)、复制如下内容并保存,注意baseurl的配置是centos7的地址

[gitlab-ce]
name=gitlab-ce
baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/
Repo_gpgcheck=0
Enabled=1
Gpgkey=https://packages.gitlab.com/gpg.ke

如果是centos6的,baseurl修改为

[gitlab-ce]
name=gitlab-ce
baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el6/
Repo_gpgcheck=0
Enabled=1
Gpgkey=https://packages.gitlab.com/gpg.ke

(3)、更新本地yum缓存

sudo yum makecache

(4)、yum安装gitlab,此处安装版本是10.2.2

sudo yum intall gitlab-ce        #自动安装最新版
sudo yum install gitlab-ce-10.2.2    #安装指定版本,此处为10.2.2

注意安装的过程中可能会报如下错误


sudo yum install gitlab-ce-10.2.2 --nogpgcheck      ####跳过校验

(5)、更改配置

    vim /etc/gitlab/gitlab.rb
    找到 external_url 'http://000.00.00.00:8081'
    修改成你的地址,此处为http://192.168.1.157:8081

(6)、对GitLab进行编译

gitlab-ctl reconfigure

(7)、清除缓存

gitlab-rake cache:clear RAILS_ENV=production

(8)、启动gitlab服务,以及关闭防火墙等操作

sudo gitlab-ctl start    # 启动所有 gitlab 组件;并加入开机启动项里面:/etc/rc.local
sudo gitlab-ctl stop     # 停止所有 gitlab 组件;
sudo gitlab-ctl restart   # 重启所有 gitlab 组件;
sudo gitlab-ctl status    # 查看服务状态;
sudo gitlab-ctl tail       # 查看日志;

关闭防火墙:

service iptables stop      ###centos6关闭防火墙
systemctl stop firewalld.service  ###centos7关闭防火墙

(9)、访问gitlab:192.168.1.157:8081,gitlab默认的root账号密码为qazwsxed,首次进入需要修改root密码




3、gitlab的备份

使用Gitlab一键安装包安装Gitlab非常简单, 同样的备份恢复与迁移也非常简单. 使用一条命令即可创建完整的Gitlab备份


gitlab-rake gitlab:backup:create

使用以上命令会在/var/opt/gitlab/backups目录下创建一个名称类似为1481598919_gitlab_backup.tar的压缩包, 这个压缩包就是Gitlab整个的完整部分, 其中开头的1481598919是备份创建的日期

此处以事务的形式进行gitlab的定时备份,创建定时脚本/iyunwen/bin/git_backup/git_backup.sh ,内容如下

#!/bin/bash
cd /var/opt/gitlab/backups/
gitlab-rake gitlab:backup:create  
find  /var/opt/gitlab/backups/  -type f -ctime +5 -exec rm -rf {} \;
加入事务:echo "30 03 * * * root run-parts /iyunwen/bin/git_backup/" >>  /etc/crontab 
每天3:30分定时备份gitlab版本数据

备份后的数据在/var/opt/gitlab/backups中存在,如下图:





4、gitlab的迁移及数据恢复

迁移如同备份与恢复的步骤一样, 只需要将老服务器/var/opt/gitlab/backups目录下的备份文件拷贝到新服务器上的/var/opt/gitlab/backups即可(如果你没修改过默认备份目录的话)
但是需要注意的是新服务器上的Gitlab的版本必须与创建备份时的Gitlab版本号相同. 比如新服务器安装的是最新的10.2.2版本的Gitlab, 那么迁移之前, 最好将老服务器的Gitlab 升级为10.2.2在进行备份

查看gitlab的版本信息如下:

cat /opt/gitlab/embedded/service/gitlab-rails/VERSION

(1)、停止gitlab服务

 gitlab-ctl stop unicorn
 gitlab-ctl stop sidekiq

(2)上传备份文件至/var/opt/gitlab/backups,此处的备份文件名称为:1534793618_gitlab_backup.tar

注意,如果迁移前后的gitlab版本不一致,会报如下错误,所以版本必须要一致

(3)、数据恢复

cd /var/opt/gitlab/backups
chmod 777 1534793618_gitlab_backup.tar
gitlab-rake gitlab:backup:restore BACKUP=1534793618

开始恢复的进度如下:

恢复完成之后,会提示如下:


可以登录gitlab地址进行验证,所有的数据都做了恢复