一、Git和SVN的区别

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

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

二、Gitlab的搭建与使用

Gitlab可以用rpm包安装,也可以用yum安装。我们这里采用yum安装。

2.1 配置YUM源

  1. # 配置yum源
  2. # cd /etc/yum.repos.d/
  3. # vim gitlab_ce.repo
  4. [gitlab-ce]
  5. name=gitlab-ce
  6. baseurl=http://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7
  7. repo_gpgcheck=0
  8. gpgcheck=0
  9. enabled=1
  10. gpgkey=https://packages.gitlab.com/gpg.key

2.2 安装与配置

2.2.1 安装

  1. # yum install gitlab-ce -y

2.2.2 配置

  1. # 配置gitlab域名访问地址
  2. # vim /etc/gitlab/gitlab.rb
  3. 改:external_url 'http://gitlab.example.com'
  4. 为:external_url 'http://172.16.2.220'
  5. # 重新配置应用程序,修改了gitlab配置文件,都要执行这个命令
  6. # gitlab-ctl reconfigure
  7. # 查看gitlab状态
  8. # gitlab-ctl status

image.png

2.2.3 使用

(1)、浏览器访问:http://172.16.2.220,设置密码
image.png
(2)、登录,用户名是root,密码是设置的密码
image.png
(3)、关闭注册功能
image.png
(4)、创建组
image.png
(5)、创建项目
image.png
(6)、创建用户
image.png
(7)、配置公钥,使用SSH拉取代码

  1. # 生成公钥
  2. # ssh-keygen
  3. # 查看公钥
  4. # cat ~/.ssh/id_rsa.pub
  5. # 把公钥添加到项目里

image.png

三、Gitlab备份

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

  1. gitlab-rake gitlab:backup:create

使用以上命令会在/var/opt/gitlab/backups目录下创建一个名称类似为1481598919_gitlab_backup.tar的压缩包, 这个压缩包就是Gitlab整个的完整部分, 其中开头的1481598919是备份创建的日期,此处以事务的形式进行gitlab的定时备份,创建定时脚本/iyunwen/bin/git_backup/git_backup.sh ,内容如下:

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

四、Gitlab的迁移及数据恢复

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

(1)、停止gitlab服务

  1. gitlab-ctl stop unicorn
  2. gitlab-ctl stop sidekiq

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

(3)、数据恢复

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

五、Gitlab项目迁

旧地址:git.aaa.com,新地址:git.bbb.net
(1)、查看目前的gitlab地址

  1. # git remote -v
  2. origin git@git.aaa.com:360fang/360-fang.git (fetch)
  3. origin git@git.aaa.com:360fang/360-fang.git (push)

(2)、在新的gitlab上新建fang项目,生成gitlab地址:git@git.bbb:360-fyd/fang.git
(3)、设置把本地gitlab地址替换成为新gitlab地址

  1. # git remote set-url origin git@git.bbb.net:360-fyd/fang.git
  2. # git remote -v
  3. origin git@git.bbb.net:360-fyd/fang.git (fetch)
  4. origin git@git.bbb.net:360-fyd/fang.git (push)

(4)、查看分支情况

  1. # git branch -a
  2. master
  3. * v1.0.0
  4. v1.1.1
  5. remotes/origin/HEAD -> origin/master
  6. remotes/origin/develop
  7. remotes/origin/master
  8. remotes/origin/newtrust
  9. remotes/origin/trust
  10. remotes/origin/v1.0.0
  11. remotes/origin/v1.0.1
  12. remotes/origin/v1.1.1

(5)、把本地指定分支,推送到新的远程代码仓库

  1. # git push origin master:master

(6)、把远程分支推送到远程
第一步:先checkout远程分支到本地

  1. # git checkout -b develop origin/develop

第二步:在push本地分支到远程仓库

  1. # git push origin develop:develop