博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
部署GitLab代码托管仓库
阅读量:5287 次
发布时间:2019-06-14

本文共 11857 字,大约阅读时间需要 39 分钟。

GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,GitLab是使用Ryby开发的一个开源的版本管理系统,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目.它拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释.可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库.团队成员可以利用内置的简单聊天程序(Wall)进行交流.它还提供一个代码片段收集功能可以轻松实现代码复用,便于日后有需要的时候进行查找,本博文内容将介绍Git,GitLab,的区别以及SVN与GitLab的差异,然后就是通过Yum包快速的搭建一个GitLab环境.

Git 与 SVN 区别点

1、GIT是分布式的,SVN不是:这是GIT和其它非分布式的版本控制系统,例如SVN,CVS等,最核心的区别.

2、GIT把内容按元数据方式存储,而SVN是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似.svn,.cvs等的文件夹里.
3、GIT分支和SVN的分支不同:分支在SVN中一点不特别,就是版本库中的另外的一个目录.
4、GIT没有一个全局的版本号,而SVN有:目前为止这是跟SVN相比GIT缺少的最大的一个特征.
5、GIT的内容完整性要优于SVN:GIT的内容存储使用的是SHA-1哈希算法.这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏.

大部分公司的处理流程如下:

PM在gitlab创建任务,分配给开发人员.

开发人员领取任务后,在本地使用git clone拉取代码库.
开发人员创建开发分支(git checkout -b dev)并进行开发.
开发人员完成之后,提交到本地仓库(git commit).
开发人员在gitlab界面上申请分支合并请求(Merge request).
PM在gitlab上查看提交和代码修改情况,确认无误后,确认将开发人员的分支合并到主分支(master).
开发人员在gitlab上Mark done确认开发完成,并关闭issue.

搭建GitLab

1.安装依赖包文件从10.x以后开始依赖policycoreutils-python.

[root@localhost ~]# yum install -y curl openssh openssh-server openssh-clients postfix cronie policycoreutils-pythonPackage curl-7.29.0-51.el7.x86_64 already installed and latest versionPackage openssh-7.4p1-16.el7.x86_64 already installed and latest versionPackage openssh-server-7.4p1-16.el7.x86_64 already installed and latest versionPackage openssh-clients-7.4p1-16.el7.x86_64 already installed and latest versionPackage 2:postfix-2.10.1-7.el7.x86_64 already installed and latest versionPackage cronie-1.4.11-20.el7_6.x86_64 already installed and latest versionPackage policycoreutils-python-2.5-29.el7.x86_64 already installed and latest versionNothing to do[root@localhost ~]# systemctl restart postfix && systemctl enable postfix

2.通过下载一个RPM包来安装,GitLab实在不需要源码安装,步骤很恶心.

[root@localhost ~]# wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-CE-10.0.0-ce.0.el7.x86_64.rpm[root@localhost ~]# rpm -ivh gitlab-ce-10.0.0-ce.0.el7.x86_64.rpm

3.修改gitlab的配置文件/etc/gitlab/gitlab.rb编辑如下.

[root@localhost ~]# vim /etc/gitlab/gitlab.rbexternal_url 'http://192.168.1.5'  #指定域名或者本机IP

4.使用gitlab-ctl reconfigure自动安装数据库,初始化信息,初始化配置时间较长.

[root@localhost ~]# gitlab-ctl reconfigure

5.使用gitlab-ctl start启动GitLab服务,如下所示.

[root@localhost ~]# gitlab-ctl start[root@localhost ~]# netstat -antp |grep "80"

6.修改配置文件,添加smtp邮件功能,此处我们直接拷贝到最后一行就行.

[root@localhost ~]# vim /etc/gitlab/gitlab.rbgitlab_rails['gitlab_email_enabled'] = truegitlab_rails['gitlab_email_from'] = 'username@domain.cn'gitlab_rails['gitlab_email_display_name'] = 'Admin'gitlab_rails['gitlab_email_reply_to'] = 'usernamei@domain.cn'gitlab_rails['gitlab_email_subject_suffix'] = '[gitlab]'gitlab_rails['smtp_enable'] = truegitlab_rails['smtp_address'] = "smtp.exmail.qq.com"gitlab_rails['smtp_port'] = 25 gitlab_rails['smtp_user_name'] = "username@domain.cn"gitlab_rails['smtp_password'] = "password"gitlab_rails['smtp_domain'] = "domain.cn"gitlab_rails['smtp_authentication'] = "login"gitlab_rails['smtp_enable_starttls_auto'] = truegitlab_rails['smtp_tls'] = falseuser['git_user_email'] = "username@domain.cn"

7.重新配置GitLab,重启服务,后期也可以使用这些命令管理GitLab.

[root@localhost ~]# gitlab-ctl reconfigure[root@localhost ~]# gitlab-ctl restart

8.使用gitlab-rails console命令进行发送邮件测试,如下所示.

[root@localhost ~]# gitlab-rails consoleLoading production environment (Rails 4.2.10)irb(main):001:0>  Notify.test_email('user@destination.com', 'Message Subject', 'Message Body').deliver_nowNotify#test_email: processed outbound mail in 2219.5msSent mail to user@destination.com (2469.5ms)Date: Fri, 04 May 2018 15:50:10 +0800From: Admin 
Reply-To: Admin
To: user@destination.comMessage-ID: <5aec10b24cfaa_93933fee282db10c162d@vm1.mail>Subject: Message SubjectMime-Version: 1.0Content-Type: text/html; charset=UTF-8Content-Transfer-Encoding: 7bitAuto-Submitted: auto-generatedX-Auto-Response-Suppress: All

Message Body

=> #
,
>,
>,
,
<5aec10b24cfaa_93933fee282db10c162d@vm1.mail>>,
,
,
,
,
,
>irb(main):002:0>quit

9.此处就配置好了,访问一下Web页面看看吧.

[root@localhost ~]# curl http://192.168.1.5 用户名root   密码:自己设置

10.忘记密码后的找回,可以参考一下内容.

[root@localhost ~]# gitlab-rails console productionirb(main):001:0> user = User.where(id: 1).first  #id为1的是超级管理员irb(main):002:0>user.password = 'yourpassword'   #密码必须至少8个字符irb(main):003:0>user.save!                       #如没有问题 返回true

Git的使用技巧

推送文件内容: 如果想要推送文件到指定仓库,可执行以下操作.

[root@localhost ~]# cd /public[root@localhost ~]# git init[root@localhost ~]# git add .[root@localhost ~]# git commit -m "项目描述"[root@localhost ~]# git remote add origin https://192.168.1.5/用户名/项目名.git[root@localhost ~]# git push -f origin master

文件的提交(标准): 在客户端上进行如下操作,将客户端文件上传到GitLab的仓库.

[root@localhost ~]# git global setup[root@localhost ~]# git config --global user.name "用户名"[root@localhost ~]# git config --global user.email "邮箱"[root@localhost ~]# git clone https://192.168.1.5/用户名/项目名.git[root@localhost ~]# cd 项目名[root@localhost ~]# git add .[root@localhost ~]# git commit -m "项目描述"[root@localhost ~]# git push -u origin master

远程仓库相关命令:

[root@localhost ~]# git clone git://github.com/lyshark/lyshark.git  #克隆远程仓库[root@localhost ~]# git remote -v                                   #查看远程仓库[root@localhost ~]# git remote add [name] [url]                     #添加远程仓库[root@localhost ~]# git remote rm [name]                            #删除远程仓库[root@localhost ~]# git remote set-url --push [name] [newUrl]       #修改远程仓库[root@localhost ~]# git pull [remoteName] [localBranchName]         #拉取远程仓库[root@localhost ~]# git push [remoteName] [localBranchName]         #推送远程仓库[root@localhost ~]# git push origin test:master                     #提交本地test作为远程的master分支[root@localhost ~]# git push origin test:test                       #提交本地test作为远程的test分支

分支(branch)操作相关命令

[root@localhost ~]# git branch                     #查看本地分支[root@localhost ~]# git branch [name]              #查看分支[root@localhost ~]# git branch -r                  #查看远程分支[root@localhost ~]# git checkout [name]            #切换分支[root@localhost ~]# git checkout -b [name]         #创建新分支并立即切换到新分支[root@localhost ~]# git branch -d [name]           #删除分支[root@localhost ~]# git merge [name]               #合并分支[root@localhost ~]# git push origin [name]         #创建远程分支(本地分支push到远程)[root@localhost ~]# git push origin :heads/[name]  #删除远程分支

版本(tag)操作相关命令

[root@localhost ~]# git tag                           #查看版本[root@localhost ~]# git tag [name]                    #创建版本[root@localhost ~]# git tag -d [name]                 #删除版本[root@localhost ~]# git tag -r                        #查看远程版本[root@localhost ~]# git push origin [name]            #创建远程版本(本地版本push到远程)[root@localhost ~]# git push origin :refs/tags/[name] #删除远程版本[root@localhost ~]# git pull origin --tags            #合并远程仓库的tag到本地[root@localhost ~]# git push origin --tags            #上传本地tag到远程仓库[root@localhost ~]# git tag -a [name] -m '描述'       #创建带注释的tag

Git常用命令汇总

[root@localhost ~]# git branch                        #查看本地所有分支[root@localhost ~]# git status                        #查看当前状态 [root@localhost ~]# git commit                        #提交[root@localhost ~]# git branch -a                     #查看所有的分支[root@localhost ~]# git branch -r                     #查看本地所有分支[root@localhost ~]# git commit -am "init"             #提交并且加注释 [root@localhost ~]# git push origin master            #将文件给推到服务器上 [root@localhost ~]# git remote show origin            #显示远程库origin里的资源 [root@localhost ~]# git push origin master:develop    #将本地库与服务器上的库进行关联 [root@localhost ~]# git checkout --track origin/dev   #切换到远程dev分支[root@localhost ~]# git branch -D master develop      #删除本地库develop[root@localhost ~]# git checkout -b dev               #建立一个新的本地分支dev[root@localhost ~]# git merge origin/dev              #将分支dev与当前分支进行合并[root@localhost ~]# git checkout dev                  #切换到本地dev分支[root@localhost ~]# git remote show                   #查看远程库[root@localhost ~]# git add .[root@localhost ~]# git rm 文件名(包括路径)             #从git中删除指定文件[root@localhost ~]# git config --list                  #看所有用户[root@localhost ~]# git ls-files                       #看已经被提交的[root@localhost ~]# git rm [file name]                 #删除一个文件[root@localhost ~]# git commit -a                      #提交当前repos的所有的改变[root@localhost ~]# git add [file name]                #添加一个文件到git index[root@localhost ~]# git commit -v                      #看commit的差异[root@localhost ~]# git commit -m "commit"             #添加commit信息[root@localhost ~]# git commit -a -a是代表add           #把所有的change加到git index里然后再commit[root@localhost ~]# git commit -a -v                   #一般提交命令[root@localhost ~]# git log                            #看你commit的日志[root@localhost ~]# git diff                           #查看尚未暂存的更新[root@localhost ~]# git rm a.a                         #移除文件(从暂存区和工作区中删除)[root@localhost ~]# git rm --cached a.a                #移除文件(只从暂存区中删除)[root@localhost ~]# git commit -m "remove"             #移除文件(从Git中删除)[root@localhost ~]# git rm -f a.a                      #强行移除修改后文件(从暂存区和工作区中删除)[root@localhost ~]# git diff --cached                  #查看尚未提交的更新[root@localhost ~]# git stash push                     #将文件给push到一个临时空间中[root@localhost ~]# git stash pop                      #将文件从临时空间pop下来

SVN服务器搭建(拓展)

SubVersion(简称SVN)是一款自由开放的版本控制软件,SubVersion可以管理文件,文件夹以及记录它们的修改状况.Subversion常用来帮助我们管理软件开发的源代码或是公司手册文档.Subversion通过将文档导入至版本库中进行管理,版本库类似于文件服务器,但比文件服务器更强大的是,它可以记录用户每一次对文件或目录的修改状况,并提供还原数据至老版本的功能,版本控制对于软件开发而言是至关重要的,现在的软件开发一般作为项目进行,一个项目中会有很多人参与,那么每个人手中都有自己的一份修改备份.

◆服务端搭建◆

1.通过YUM仓库快速安装SVN软件,这种软件无需编译安装.

[root@localhost ~]# yum install -y apr apr-util subversionLoaded plugins: fastestmirrorLoading mirror speeds from cached hostfilePackage apr-1.4.8-3.el7_4.1.x86_64 already installed and latest versionPackage apr-util-1.5.2-6.el7.x86_64 already installed and latest versionPackage subversion-1.7.14-14.el7.x86_64 already installed and latest versionNothing to do

2.下面我们将在/var/svn/目录下,创建一个my_project版本库.

[root@localhost ~]# mkdir -p /var/svn[root@localhost ~]# svnadmin create /var/svn/my_project           #创建一个项目[root@localhost ~]# snvadmin hotcopy /var/svn/my_project ./back   #热备份[root@localhost ~]# svnadmin lslocks /var/svn/my_project          #打印描述信息[root@localhost ~]# ls -l /var/svn/total 0drwxr-xr-x. 6 root root 86 Dec 20 21:11 my_project

2.接着我们将本地/etc目录下的资源导入至var/svn/my_project中,其中-m参数是描述信息.

[root@localhost ~]# svn import /etc file:///var/svn/my_project/ -m "Inital Data"[root@localhost ~]# svn list file:///var/svn/my_project/      #列出版本库中资料列表.

3.认证授权操作,服务器会根据版本库目录下的./conf/svnserver.conf文件进行权限的控制.

[root@localhost ~]# vim /var/svn/my_project/conf/svnserve.conf[general]anon-access = none      #设置拒绝匿名访问,此处可设置:none,read,writeauth-access = write     #经过认证的账户权限为可写入password-db = passwd    #指定用户名密码存放路径,该文件在conf目录authz-db = authz        #指定基于路径的访问控制文件名real = My Project       #设置版本库域,如果相同域,则使用相同密码验证

4.配置一个passwd密码文件,默认在conf目录下,写入需要认证的用户数据.

[root@localhost ~]# vim /var/svn/my_project/conf/passwd[users]harry = 123123     #用户名为harry,密码是123123lyshark = 123123

5.接着我们来定义一下组的权限配置列表,与组的管理员列表.

[root@localhost ~]# vim /var/svn/my_project/conf/authz[groups]admins = harry,lyshark     #定义组,组内成员有harry,lyshark[/]                        #对版本库根路径设置权限@admins = rw               #组内成员具有读写权限* = r                      #其他所有人只有只读权限

6.启动svnserver服务器,并通过-r选项指定一个虚拟路径.

[root@localhost ~]# svnserve -d --listen-port=3690 -r /var/svn/[root@localhost ~]# netstat -antp |grep 3690tcp        0      0 0.0.0.0:3690            0.0.0.0:*               LISTEN      1474/svnserve

◆客户端操作◆

克隆版本库:/var/svn/my_project版本库克隆一份到本地的./my_project目录.

[root@localhost ~]# svn checkout file:///var/svn/my_project/ ./my_project[root@localhost ~]# svn co svn://192.168.1.5/my_project ./my_project

发布数据: 将本地工作副本./my_project修改后的内容发布到版本库中.

[root@localhost ~]# svn commit -m "My_project" ./my_project/[root@localhost ~]# svn delete URL    #从版本库删除一个项目

转载于:https://www.cnblogs.com/LyShark/p/10229662.html

你可能感兴趣的文章
A4纸的象素分辨率计算[转]
查看>>
sql server 对数运算函数log(x)和log10(x)
查看>>
中国剩余定理(模板+详解)
查看>>
POST JSON (字典 自定义类转为JSON上传)
查看>>
天下码农苦外包公司久矣
查看>>
css小工具
查看>>
深入理解单例模式
查看>>
详解ListView加载网络图片的优化,让你轻松掌握!
查看>>
算法第3章上机实践报告
查看>>
oracle中的intersect和minus
查看>>
JAVA编程入门
查看>>
Markdown 轻量级标记语言
查看>>
圆桌问题
查看>>
[APIO2015]八邻旁之桥
查看>>
[CTS2019]田野(80分)
查看>>
C++学习5 IO输入输出
查看>>
python:webbrowser
查看>>
<keep-alvie></keep-alive>
查看>>
Nbody问题 Barnes-Hut 实现
查看>>
JS 实现获取打开一个界面中输入的值
查看>>