该系列文章只是本人的学习笔记,文章中的文字描述提取自《Linux鸟哥私房菜》《Linux运维之道》等书中的重点内容,部分内容是在培训Linux运维时总结的笔记,化繁为简能够在工作中快速复习掌握重点,并不代表个人立场,但转载请加出处,并注明参考文献。

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.

  1. [root@localhost ~]# yum install -y curl openssh openssh-server openssh-clients postfix cronie policycoreutils-python
  2. Package curl-7.29.0-51.el7.x86_64 already installed and latest version
  3. Package openssh-7.4p1-16.el7.x86_64 already installed and latest version
  4. Package openssh-server-7.4p1-16.el7.x86_64 already installed and latest version
  5. Package openssh-clients-7.4p1-16.el7.x86_64 already installed and latest version
  6. Package 2:postfix-2.10.1-7.el7.x86_64 already installed and latest version
  7. Package cronie-1.4.11-20.el7_6.x86_64 already installed and latest version
  8. Package policycoreutils-python-2.5-29.el7.x86_64 already installed and latest version
  9. Nothing to do
  10. [root@localhost ~]# systemctl restart postfix && systemctl enable postfix

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

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

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

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

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

  1. [root@localhost ~]# gitlab-ctl reconfigure

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

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

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

  1. [root@localhost ~]# vim /etc/gitlab/gitlab.rb
  2. gitlab_rails['gitlab_email_enabled'] = true
  3. gitlab_rails['gitlab_email_from'] = 'username@domain.cn'
  4. gitlab_rails['gitlab_email_display_name'] = 'Admin'
  5. gitlab_rails['gitlab_email_reply_to'] = 'usernamei@domain.cn'
  6. gitlab_rails['gitlab_email_subject_suffix'] = '[gitlab]'
  7. gitlab_rails['smtp_enable'] = true
  8. gitlab_rails['smtp_address'] = "smtp.exmail.qq.com"
  9. gitlab_rails['smtp_port'] = 25
  10. gitlab_rails['smtp_user_name'] = "username@domain.cn"
  11. gitlab_rails['smtp_password'] = "password"
  12. gitlab_rails['smtp_domain'] = "domain.cn"
  13. gitlab_rails['smtp_authentication'] = "login"
  14. gitlab_rails['smtp_enable_starttls_auto'] = true
  15. gitlab_rails['smtp_tls'] = false
  16. user['git_user_email'] = "username@domain.cn"

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

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

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

  1. [root@localhost ~]# gitlab-rails console
  2. Loading production environment (Rails 4.2.10)
  3. irb(main):001:0> Notify.test_email('user@destination.com', 'Message Subject', 'Message Body').deliver_now
  4. Notify#test_email: processed outbound mail in 2219.5ms
  5. Sent mail to user@destination.com (2469.5ms)
  6. Date: Fri, 04 May 2018 15:50:10 +0800
  7. From: Admin <username@domain.cn>
  8. Reply-To: Admin <username@domain.cn>
  9. To: user@destination.com
  10. Message-ID: <5aec10b24cfaa_93933fee282db10c162d@vm1.mail>
  11. Subject: Message Subject
  12. Mime-Version: 1.0
  13. Content-Type: text/html;
  14. charset=UTF-8
  15. Content-Transfer-Encoding: 7bit
  16. Auto-Submitted: auto-generated
  17. X-Auto-Response-Suppress: All
  18. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
  19. <html><body><p>Message Body</p></body></html>
  20. => #<Mail::Message:70291731344240, Multipart: false, Headers: <Date: Fri, 04 May 2018 15:50:10 +0800>, <From: Admin <username@domain.cn>>, <Reply-To: Admin <username@domain.cn>>, <To: user@destination.com>, <Message-ID: <5aec10b24cfaa_93933fee282db10c162d@vm1.mail>>, <Subject: Message Subject>, <Mime-Version: 1.0>, <Content-Type: text/html; charset=UTF-8>, <Content-Transfer-Encoding: 7bit>, <Auto-Submitted: auto-generated>, <X-Auto-Response-Suppress: All>>
  21. irb(main):002:0>quit

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

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

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

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

Git的使用技巧

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

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

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

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

远程仓库相关命令:

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

分支(branch)操作相关命令

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

版本(tag)操作相关命令

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

Git常用命令汇总

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

SVN服务器搭建(拓展)

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

◆服务端搭建◆

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

  1. [root@localhost ~]# yum install -y apr apr-util subversion
  2. Loaded plugins: fastestmirror
  3. Loading mirror speeds from cached hostfile
  4. Package apr-1.4.8-3.el7_4.1.x86_64 already installed and latest version
  5. Package apr-util-1.5.2-6.el7.x86_64 already installed and latest version
  6. Package subversion-1.7.14-14.el7.x86_64 already installed and latest version
  7. Nothing to do

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

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

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

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

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

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

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

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

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

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

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

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

◆客户端操作◆

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

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

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

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

部署GitLab代码托管仓库的更多相关文章

  1. 有手就行——Jenkins介绍 及 Gitlab代码托管服务器安装

    Jenkins 介绍 及 Gitlab代码托管服务器安装 Gitlab安装 源码上传到Gitlab仓库 Jenkins介绍 Jenkins 是一款流行的开源持续集成(Continuous Integr ...

  2. 在 CentOS 上部署 GitLab (自托管的Git项目仓库)

    参考资料https://github.com/mattias-ohlsson/gitlab-installer/blob/master/gitlab-install-el6.sh 环境准备OS: Ce ...

  3. openshift 平台上部署 gitlab代码仓库服务

    背景: 本文档将以在openshift 平台上部署 gitlab 服务来验证集群各个服务组件的可用性以及熟悉openshift的使用方法.服务部署方式可以多种多样,灵活部署.本篇以常见的镜像部署方式来 ...

  4. 企业级代码托管Gitlab

    Gitlab概述: 一个利用Ruby on Rails开发的开元应用程序,从而实现一个代码托管项目仓库,可以通过web界面进行访问公开的或者私有的项目 Ruby on Rails是一个可以使开发,部署 ...

  5. CentOS 7 部署GitLab

    GitLab概述 : 是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的Git项目仓库,可通过 Web 界面进行访问公开的戒者私人项目.Ruby on Rails 是一个可以 ...

  6. git jenkins 基本部署 gitlab私有仓库

    从代码私有性方面来看,公司不希望员工获取到全部的代码,这个时候 GitLab 无疑是最佳的选择.但对于开源项目而言,GitHub 依然是代码托管的首选平台. 1.安装gitlab[root@gitla ...

  7. vps实现私人代码托管并用nginx部署hexo

    个人博客 原本我的博客是通过github pages搭建的,但由于一些众所周知的原因,即使套上了CDN依旧是访问状态令人堪忧,经常会造成各种各样的问题,并且由于不存在服务器也不好进行进一步的管理,更不 ...

  8. GitLab企业级代码管理仓库

    原文:https://www.cnblogs.com/wsnbba/p/10171052.html   使用GitHub或者码云等公共代码仓库 使用GitLab私有仓库 GitLab是什么? 是一个用 ...

  9. 程序员必须知道的几个Git代码托管平台

    上一篇博客中2015继续任性——不会Git命令,照样玩转Git我们简单的介绍了在VS2013中使用Git,和GitHub客户端的使用.那么使用Git到底有什么好处呢?最为明显的是支持Git代码托管的平 ...

随机推荐

  1. leetcode1032

    class StreamChecker: def __init__(self, words: 'List[str]'): self.maxLen = 0 self.List = set(words) ...

  2. Activity中满屏和去标题的实现方法

    两种方式: 在xml文件中进行配置 在项目的清单文件AndroidManifest.xml中,找到需要全屏或设置成无标题栏的Activity,在该Activity进行如下配置即可. 实现全屏效果: a ...

  3. 去BAT,你应该要看一看的面试经验总结(转)

    来源微信公众号『easyserverdev』 http://mp.weixin.qq.com/s/UZljzFMjobo1wzCguY7NDg 说下我的面试经验吧,都是亲身经历,不喜勿喷: 我去年12 ...

  4. 总结http状态码和200,304状态码

    状态码  响应类别  中文意思 1XX  信息性状态码(Informational) 服务器正在处理请求 2XX 成功状态码(Success) 请求已正常处理完毕 3XX 重定向状态码(Redirec ...

  5. React.js 学习笔记

    React.js React.js 是时下最流行的前端 JavaScript 框架之一. 创建工程 # 安装 CLI $ npm install -g create-react-app # 创建新的应 ...

  6. djjango models表关系

    *** detail表级联 student表,detail获取student的学生信息,自己做为扩展 一对一关系 models.OneToOneField student = models.OneTo ...

  7. PHP安装linux

    PHP 7.1.26 安装 1. 下载安装包 例php-7.1.26.tar.gz 下载地址:http://cn2.php.net/downloads.php 2. 放入/root 3. 切换目录 # ...

  8. 动态加载、移除js、css

    本文简单介绍动态加载.移除.替换js/css文件 .有时候我们在写前端的时候,会有出现需要动态加载一些东如css js 这样能减轻用户加载负担,从而提高响应效率.下面贴出代码.//JS写法 <s ...

  9. django 表单使用

    Django提供对表单处理的支持,可以简化并自动化大部分的表单处理工作. 1 定义表单类 表单系统的核心部分是Django 的Form类. Django 的数据库模型描述一个对象的逻辑结构.行为以及展 ...

  10. 通过django的rest-framework……(CBV)

    为什么不使用FBV,因为CBV重用性很高 先看一个例子: from django.views.generic.base import View from django.http import Http ...