引言:公司代码的管理不统一,一部分人用SVN,一部分人用Git,对于习惯了使用Linux或者Mac命令行的人来说,Git的操作更方便和快捷,GitHub如果不是开源项目的话是需要付费使用,所以选择使用GitLab
一、gitlab 介绍
Gitlab是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务。Gitlab有乌克兰程序员DmitriyZaporozhets和ValerySizov开发,它由Ruby写成。后来,一些部分用Go语言重写,现今并在国内外大中型互联网公司广泛使用。gitlab-ce是它的社区版,gitlab-ee是企业版,是收费的。
二、git和svn 的区别
Git: 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
下图就是分布式版本控制工具管理方式:
Git是分布式版本控制系统,它没有中央服务器,每个人的电脑就是一个完整的版本库,这样工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
SVN: 是一个开放源代码的版本控制系统,通过采用分支管理系统的高效管理,简而言之就是用于多个人共同开发同一个项目,实现共享资源,实现最终集中式的管理。集中管理方式在一定程度上看到其他开发人员在干什么,而管理员也可以很轻松掌握每个人的开发权限。
下图就是标准的集中式版本控制工具管理方式:
但是相较于其优点而言,集中式版本控制工具缺点很明显:
服务器单点故障
容错性差
Git 的内容完整性要优于svn
GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。
一个研发队伍的成员正常包括:需求分析、设计、美工、程序员、测试、实施、运维,每个成员在工作中都有产出物, 包括了文档、设计代码、程序代码,这些都需要按项目集中进行管理的。SVN能清楚的按目录进行分类管理, 使项目组的管理处于有序高效的状态,SVN更适用于项目管理, Git更适用于代码管理。
1、 集中式vs分布式
Subversion(svn)属于集中式的版本控制系统
Git属于分布式的版本控制系统
2. 版本库与工作区
SVN的版本库和工作区是分离的
Git 的版本库和工作区如影随形
3. 全局版本号和全球版本号
SVN的全局版本号和CVS的每个文件都独立维护一套版本号相比,是一个非常大的进步。在看似简单的全局版本号的背后,是Subversion提供对于事物处理的支持,每一个事物处理(即一次提交)都具有整个版本库全局唯一的版本号。
Git的版本号则更进一步,版本号是全球唯一的。Git 对于每一次提交,通过对文件的内容或目录的结构计算出一个SHA-1 哈希值,得到一个40位的十六进制字符串,Git将此字符串作为版本号
4、部分检出和全局检出
Subversion可以将整个库检出到工作区,也可以将某个目录检出到工作区。对于要使用一个庞大、臃肿的版本库的用户来说,部分检出是非常方便和实际的。
Git只能全部检出,不支持按照目录进行的部分检出。
5、更新和提交
在SVN中,因为只有一个中心仓库,所以所谓的远程更新,也就是svn update ,通过此命令来使工作区和版本库保持同步。如果不能连接到服务器上,基本上不可以工作。
对于git来说,别人的改动是存在于远程仓库上的,所以git checkout命令尽管在某些功能上和svn中的update类似(例如取仓库特定版本的内容),但是在远程更新这一点上,还是不同的,不属于git checkout的功能涵盖范围。 Git使用git fetch和git pull来完成远程更新任务,fetch操作只是将远程数据库的object拷贝到本地,然后更新remotes head的refs,git pull 的操作则是在git fetch的基础上对当前分支外加merge操作。可离线工作。
三、Git和svn的优缺点比较
1、SVN优缺点
优点:
1、 管理方便,逻辑明确,符合一般人思维习惯。
2、 易于管理,集中式服务器更能保证安全性。
3、 代码一致性非常高。
4、 适合开发人数不多的项目开发。
缺点:
1、 服务器压力太大,数据库容量暴增。
2、 如果不能连接到服务器上,基本上不可以工作,如果服务器不能连接上,就不能提交,还原,对比等等。
3、 不适合开源开发(开发人数非常非常多,但是Google app engine就是用svn的)。但是一般集中式管理的有非常明确的权限管理机制(例如分支访问限制),可以实现分层管理,从而很好的解决开发人数众多的问题。
2、Git优缺点
优点:
1、适合分布式开发,强调个体。
2、公共服务器压力和数据量都不会太大。
3、速度快、灵活。
4、任意两个开发者之间可以很容易的解决冲突。
5、离线工作。
缺点:
1、学习周期相对而言比较长。
2、不符合常规思维。
3、代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。
四、git、gitlab、GitHub的简单区别
git 是一种基于命令的版本控制系统,全命令操作,没有可视化界面
gitlab 是一个基于git实现的在线代码仓库软件,提供web可视化管理界面,通常用于企业团队内部协作开发
github 是一个基于git实现的在线代码托管仓库,亦提供可视化管理界面,同时免费账户和提供付费账户,提供开放和私有的仓库,大部分的开源项目都选择github作为代码托管仓库
其中:
1、Gitlab和GitHub的区别
相同点:二者都是基于web的Git仓库,在很大程度上Gitlab是仿照GitHub来做的;
它们都提供了分享开源项目的平台,为开发团队提供了存储、分享、发布
和合作开发项目的中心化云存储的场所。
不同点:GitHub如果要使用私有仓库,是需要付费的。Gitlab可以在上面创建私人的免费仓库。
Gitlab让开发团队对他们的代码仓库拥有更多的控制,相比于GitHub,它有不少的特色:允许免费设置仓库权限;允许用户选择分享一个project的部分代码;允许用户设置project的获取权限,进一步的提升安全性;可以设置获取到团队整体的改进进度;通过innersourceing让不在权限范围内的人访问不到该资源。从代码私有性方面来看有时公司并不希望员工获取到全部的代码,这个时候Gitlab无疑是更好的选择。但是对于开源项目而言,GitHub依然是代码托管的首选。
五、Gitlab 搭建
方法一、脚本安装gitlab
#!/bin/bash #安装依赖 systemctl stop firewalld setenforce 0 a = `ifconfig ens33 |grep inet |awk 'NR==1{print $2}' ` yum install curl wget policycoreutils policycoreutils - python openssh - server openssh - clients postfix - y > / dev / null systemctl enable sshd systemctl start sshd sed - i 's/inet_interfaces = localhost/inet_interfaces = all/g' / etc / postfix / main.cf #正式安装gitlab curl - sS https: / / packages.gitlab.com / install / repositories / gitlab / gitlab - ce / script.rpm.sh | bash > / dev / null sed - i "s/baseurl=https:\/\/packages.gitlab.com\/gitlab\/gitlab-ce\/el\/7\/\$basearch/baseurl=https:\/\/mirrors.tuna.tsinghua.edu.cn\/gitlab-ce\/yum\/el\$releasever\//g" / etc / yum.repos.d / gitlab_gitlab - ce.repo yum makecache &> / dev / null yum install gitlab - ce - y #已经安装完成 #验证是否安装成功 right = $(yum list installed | grep gitlab - ce) gitlab = 'gitlab-ce' if [[ ${right} = ~ "${gitlab}" ]];then echo "gitlab-ce已经安装成功啦!" else echo "gitlab-ce没有安装成功,请重新检查!" exit fi sed - i '32s/gitlab.example.com/' $a ':9099/' / etc / gitlab / gitlab.rb gitlab - ctl reconfigure > / dev / null echo "此时访问本地IP:9099 就可以显示gitlab 的页面了!"
方法二、清华开源软件rpm下载
Index of /gitlab-ce/yum/el7/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror rp文件下载地址
## 安装依赖 yum install -y curl policycoreutils openssh-server openssh-clients
##启动ssh服务&设置为开机启动
systemctl enable sshd
systemctl start sshd
安装Postfix Postfix是一个邮件服务器,GitLab发送邮件需要用到 #安装postfix yum install -y postfix #启动postfix并设置为开机启动 systemctl enable postfix systemctl start postfix
开放ssh以及http服务(80端口) #开放ssh、http服务 firewall-cmd --add-service=ssh --permanent firewall-cmd --add-service=http --permanent 说明允许ssh服务通过成功
#重载防火墙规则 firewall-cmd --reload
或者
直接关闭防火墙以及开机自关闭
systemctl stop firewalld systemctl disable firewalld setenforce 0
安装gitlab
如果出现下图,则说明安装成功。
安装完gitlab需要修改配置文件,并加载
Vim /etc/gitlab/gitlab.rb 进入配置文件
#找到下面一行,修改ip
修改好配置文件后,要使用 gitlab-ctl reconfigure 命令重载一下配置文件,否则不生效即可启动Gitlab。注意,启动过程较长,需要耐心等待。
设置external_url ‘http://ip地址:端口号’,保存
修改puma端口号puma['port'] = xxxx,默认为8080,不修改可能会有端口冲突导致gitlab报502
执行:
[root@bd ~]# gitlab-ctl reconfigure// 可能会打印许多信息 #最后提示成功信息语句 Recipe: monitoring::alertmanager * runit_service[alertmanager] action restart (up to date) Recipe: monitoring::postgres-exporter * runit_service[postgres-exporter] action restart (up to date) Recipe: monitoring::grafana * runit_service[grafana] action restart (up to date) Running handlers: Running handlers complete Chef Infra Client finished, 572/1516 resources updated in 04 minutes 33 seconds Notes: Default admin account has been configured with following details: Username: root Password: You didn't opt-in to print initial root password to STDOUT. Password stored to /etc/gitlab/initial_root_password. This file will be cleaned up in first reconfigure run after 24 hours. NOTE: Because these credentials might be present in your log files in plain text, it is highly recommended to reset the password following https://docs.gitlab.com/ee/security/reset_user_password.html#reset-your-root-password. gitlab Reconfigured!
如果reconfigure卡在ruby_block[wait for logrotate service socket]
执行
gitlab-ctl restart
[root@bd ~]# gitlab-ctl restart [root@bd ~]# gitlab-ctl status //查看状态 ------------------------------------------------------------- run: alertmanager: (pid 8494) 31s; run: log: (pid 7854) 154s run: gitaly: (pid 8503) 29s; run: log: (pid 7254) 285s run: gitlab-exporter: (pid 8525) 29s; run: log: (pid 7779) 172s run: gitlab-workhorse: (pid 8527) 29s; run: log: (pid 7688) 188s run: grafana: (pid 8542) 28s; run: log: (pid 8149) 92s run: logrotate: (pid 8553) 28s; run: log: (pid 7166) 298s run: nginx: (pid 8559) 27s; run: log: (pid 7718) 183s run: node-exporter: (pid 8565) 27s; run: log: (pid 7756) 177s run: postgres-exporter: (pid 8571) 26s; run: log: (pid 7882) 148s run: postgresql: (pid 8659) 26s; run: log: (pid 7396) 273s run: prometheus: (pid 8661) 26s; run: log: (pid 7827) 160s run: puma: (pid 8680) 25s; run: log: (pid 7621) 204s run: redis: (pid 8685) 25s; run: log: (pid 7206) 290s run: redis-exporter: (pid 8691) 24s; run: log: (pid 7801) 166s run: sidekiq: (pid 8701) 22s; run: log: (pid 7652) 196s #启动成功
输入刚才设置的ip和端口号,输入访问页面,正常
如果出现问题可使用tail命令查看日志定位问题,看看是否有端口占用的情况
gitlab-ctl tail
修改root密码
’root初始密码在下面这个文件中,24小时候会自动删除,root账号登陆后需要尽快修改密码
/etc/gitlab/initial_root_password
常用操作命令
#配置重新加载 gitlab-ctl reconfigure # 启动gitlab gitlab-ctl start # 停止gitlab gitlab-ctl stop # 查看gitlab命令 gitlab-ctl --help #查看gitlab日志 gitlab-ctl tail [process name] #[process name可选]
卸载gitlab
#先杀死进程 kill -9 xxx #卸载gitlab(ce是社区版) rpm -e gitlab-ce #最后删除文件 find / -name gitlab | xargs rm -rf
六、gitlab安装目录
以下是gitlab常用的默认安装目录
gitlab组件日志路径:/var/log/gitlab gitlab配置路径:/etc/gitlab/ 路径下有gitlab.rb配置文件 应用代码和组件依赖程序:/opt/gitlab 各个组件存储路径: /var/opt/gitlab/ 仓库默认存储路径 /var/opt/gitlab/git-data/repositories 版本文件备份路径:/var/opt/gitlab/backups/ nginx安装路径:/var/opt/gitlab/nginx/ redis安装路径:/var/opt/gitlab/redis
七、GitLab常用命令汇总
#查看服务状态 gitlab-ctl status 使用控制台实时查看日志 # 查看所有的logs; 按 Ctrl-C 退出 gitlab-ctl tail # 拉取/var/log/gitlab下子目录的日志 gitlab-ctl tail gitlab-rails # 拉取某个指定的日志文件 gitlab-ctl tail nginx/gitlab_error.log #启动关闭gitlab gitlab-ctl start gitlab-ctl stop #停止 gitlab-ctl status #查看状态 gitlab-ctl restart #重启 gitlab-ctl reconfigure #更新配置文件 gitlab-ctl help #帮助 gitlab-rake gitlab:check SANITIZE=true --trace 检查gitlab #gitlab 默认的日志文件存放在/var/log/gitlab 目录下 gitlab-ctl tail #查看所有日志 #禁止 Gitlab 开机自启动 systemctl disable gitlab-runsvdir.service #启用 Gitlab 开机自启动 systemctl enable gitlab-runsvdir.service
剩余内容可参考
https://blog.csdn.net/weixin_56270746/article/details/125427722