# git、gitlab、github的区别 基础概念
和SVN类似,Git是一个版本控制系统(Version Control System,VCS),不同的是SVN为集中式版本控制系统,为单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新,git为分布式版本控制系统,关于SVN和git的对比,可以通过下图进行说明(但最大的区别在于svn为集中式,git为分布式)
# svn
svn好比一个巨大的图书馆,当你要借一本书的时候,需要先从图书馆借出,回家之后自己改,改完之后还是返回给图书馆,而git的方式完全不同,所有的客户端都一个是完整的版本库,没有中央控制的概念,可以这样类比,git提供了一个虚拟的全量图书馆,所有人都有一个虚拟的图书馆,当你想看其中一本书的时候,从自己的虚拟图书馆里面检索出来即可,如果你修改了其中的内容,可以直接提交到自己的虚拟图书馆里面,也不会影响其他人的图书馆,当有其他人想要看你修改的一本书的时候,你只要将对应的一本书的URL发给对方即可。
# Git
关于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让开发团队对他们的代码仓库拥有更多的控制。
# Gitlab 安装配置
# gitlab 安装脚本
curl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
由于资源在国外,国内下载很慢,推荐使用清华大华gitlab源
vim /etc/yum.repos.d/gitlab-ce.repo
添加如下内容
[gitlab-ce]
name=Gitlab CE Repository
baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/
gpgcheck=0
enabled=1
2
3
4
5
6
7
8
9
10
11
添加完成后,执行如下代码:
- 安装
sudo yum makecache
sudo yum install gitlab-ce
2
- 配置更改
vim /etc/gitlab/gitlab.rb
## 找到 external_url 'http://000.00.00.00:8081'
## 修改成你的地址,此处为http://192.168.1.157:8081
2
3
4
5
- 对GitLab进行编译
sudo gitlab-ctl reconfigure
- 清除缓存
gitlab-rake cache:clear RAILS_ENV=production
- 启动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 # 查看日志;
2
3
4
5
6
7
8
9
关闭防火墙
service iptables stop ###centos6关闭防火墙
systemctl stop firewalld.service ###centos7关闭防火墙
2
3
# Gitlab 备份
使用Gitlab一键安装包安装Gitlab非常简单, 同样的备份恢复与迁移也非常简单. 使用一条命令即可创建完整的Gitlab备份
gitlab-rake gitlab:backup:create
# 修改备份文件目录
可以通过/etc/gitlab/gitlab.rb
配置文件来修改默认存放备份文件的目录
gitlab_rails['backup_path'] = "/var/opt/gitlab/backups"
修改完成之后使用gitlab-ctl reconfigure
命令重载配置文件即可
# 设置备份过期时间
[root@gitlab ~]# vim /etc/gitlab/gitlab.rb
更改如下行
gitlab_rails['backup_keep_time'] = 604800 #以秒为单位
# gitlab自动备份
创建定时任务
[root@gitlab ~]# crontab -e
0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create
2
3
# Gitlab 迁移与恢复
Gitlab 备份版本与Gitlab恢复版本要一致
- 在老服务器上将备份文件发送至新服务器的相应目录下
[root@gitlab ~]# scp /var/opt/gitlab/backups/1530156812_2018_06_28_10.8.4_gitlab_backup.tar [email protected]:/var/opt/gitlab/backups/
# gitlab恢复
[root@gitlab ~]# gitlab-ctl stop unicorn #停止相关数据连接服务
[root@gitlab ~]# gitlab-ctl stop sidekiq
[root@gitlab-new ~]# chmod 777 /var/opt/gitlab/backups/1530156812_2018_06_28_10.8.4_gitlab_backup.tar
#修改权限,如果是从本服务器恢复可以不修改
[root@gitlab ~]# gitlab-rake gitlab:backup:restore BACKUP=1530156812_2018_06_28_10.8.4
#从1530156812_2018_06_28_10.8.4编号备份中恢复
2
3
4
5
6
7
8
9
10
11
按照提示输入两次yes并回车
# gitlab升级
[root@gitlab ~]# gitlab-ctl stop #关闭gitlab服务
[root@gitlab ~]# gitlab-rake gitlab:backup:create #备份
2
3
4
下载新版gitlab的rpm包安装,安装时选择升级
安装的过程中可能会出现报错
Error executing action `run` on resource 'ruby_block[directory resource: /var/opt/gitlab/git-data/repositories]'
解决方法为
[root@gitlab ~]# chmod 2770 /var/opt/gitlab/git-data/repositories
# 安装成功后重新加载配置并启动
[root@gitlab ~]# gitlab-ctl reconfigure
[root@gitlab ~]# gitlab-ctl restart
2
3
4
5
6
7
8
# gitlab更改默认的nginx
[root@gitlab ~]# vim /etc/gitlab/gitlab.rb
nginx['enable'] = false #不启用nginx
2
3
- 检查默认nginx配置文件,并迁移至新Nginx服务
/var/opt/gitlab/nginx/conf/nginx.conf #nginx配置文件,包含gitlab-http.conf文件
/var/opt/gitlab/nginx/conf/gitlab-http.conf #gitlab核心nginx配置文件
2
3
- 重启 nginx、gitlab服务
[root@gitlab ~]# gitlab-ctl restart
[root@gitlab ~]# systemctl restart nginx.service
2
3
访问可能出现报502。原因是nginx用户无法访问gitlab用户的socket文件。 重启gitlab需要重新授权
[root@gitlab ~]# chmod -R o+x /var/opt/gitlab/gitlab-rails