持续集成---git的使用

持续集成

1. 基础知识

1. devops 产生原因
  • dev(development) 开发、ops (operation)运维,但是开发和运维在本质上是相互冲突的,开发要根据客户需求做出相应的改变,适应市场的变化,而运维则是保持系统或产品的稳定性。所以为了更好的解决两者的冲突,devops应运而生。
2. devops 的作用
  • 提高产品质量
  • 自动化测试
  • 代码质量管理工具
3. devops 如何实现
  • 设计架构规划 ----> 代码的存储方式 -----> 构建、测试、预生产、部署、监控
4. 版本控制系统简介
  • 版本控制系统是一种记录一个或若干个文件内容变化,以便将来查阅特定版本内容情况的系统
5. 版本控制系统特点
  • 记录文件所有历史变化
  • 随时可恢复到任何一个历史状态
  • 多人协作开发
6. 常见的版本控制系统工具
  • SVN
    集中式的版本控制系统,只有一个中央数据仓库,如果中央数据仓库挂了或者不可访问,所有使用者就无法使用 SVN ,无法进行提交或者文件备份。
  • Git
    分布式的版本控制系统,在每个使用者电脑上都有一个完整的数据仓库,没有网络依然可以使用Git,当然为了习惯及团队协作,会将本地数据同步到Git服务器或者GitHub等代码仓库。
7. git 目录介绍
  • 工作目录,即使用git init初始化的目录
  • 暂存区,在工作目录中使用git add命令将文件添加到暂存区,即隐藏目录中的 index 文件
  • 本地仓库,在工作目录使用 git commit命令将文件提交到本地仓库
  • 远程仓库,只有本地仓库的文件才能使用git push命令推到远程仓库。

2. Git 安装部署

`yum` install -y git
git config --global user.name "lsk"	             # 创建用户
git config --global user.email "example@qq.com"  # 用户email
git config --global color.ui true 			    # 语法高亮
mkdir /data/gitroot   						   # 创建仓库
cd /data/gitroot
git init	 								 # 初始化仓库
git status									 # 查看当前工作区状态

3. Git 隐藏文件介绍

tree ./
./
├── branches	   # 分支目录
├── config		   # 定义项目特有的配置选项
├── description     # 仅供 git web 程序使用
├── HEAD		   # 指示当前的分支
├── hooks           # 包含 git 钩子文件
│   ├── applypatch-msg.sample
│   ├── commit-msg.sample
│   ├── post-update.sample
│   ├── pre-applypatch.sample
│   ├── pre-commit.sample
│   ├── prepare-commit-msg.sample
│   ├── pre-push.sample
│   ├── pre-rebase.sample
│   └── update.sample
├── info       # 包含一个全局排除文件(exclude)
│   └── exclude
├── objects    # 存放所有数据内容
│   ├── info
│   └── pack
└── refs       # 存放指向数据的提交对象的指针信息
    ├── heads
    └── tags
index          # 保存暂存区信息,在 git add 之前没有

4. git 常用命令介绍

1. 增加、提交、推送
  • 向暂存区增加文件

    git add 1.txt  # 向暂存区添加 1.txt 文件, ## 注意:1.txt 必须在工作区中
    git add .      # 向暂存区添加工作区中所有的文件
    ## 错误fatal: Not a git repository (...): .git
       # 解决:重新 git init 即可。
    
  • 向本地仓库提交文件

    git commit -m "add all file" # 向本地仓库提交暂存区所有的文件
    git commit -m "commit a file 1.txt" 1.txt # 向本地仓库提交暂存区中的 1.txt 文件
    
2. 删除文件
  • 删除工作区文件

    rm -rf 1.txt
    git checkout 1.txt # 若是误删了,而且暂存区或者本地仓库有这个文件,可以用这个命令找回
    
  • 删除暂存区文件

    git rm --cached 1.txt # 工作区还有该文件  
    
  • 彻底删除文件

    git rm 1.txt
    
3. 修改文件
  • 向文件添加内容

    echo "hello world2" >> 1.txt
    git add 1.txt 
    git commit -m"version 2"
    [只需要在重新增加和提交即可]
    
  • 修改文件名称

    git mv a a.txt                  # 将 a 修改为 a.txt
    git commit -m "modify a a.txt"  # 提交修改
    
4. 比对两个文件的内容
  • 比对工作目录中不同文件的内容

    diff c.txt d 
    1c1
    < hello gx
    ---
    > hello
    cat c.txt 
    hello gx
    cat d 
    hello
    
  • 比对工作区和暂存区的内容

    git diff a
    
    diff --git a/a b/a
    index ce01362..94954ab 100644
    --- a/a
    +++ b/a
    @@ -1 +1,2 @@
     hello
    +world
    
  • 比对暂存区和本地仓库的内容

     git diff --cached a
    diff --git a/a b/a
    index 94954ab..d3b4ea7 100644
    --- a/a
    +++ b/a
    @@ -1,2 +1,3 @@
     hello
     world
    +gx
    
5. 版本回溯
git log                            # 获取回溯版本的hash值,如dc72730
git log --oneline                  # 每个版本信息只占一行,简洁
git log -p						 # 显示更改内容
git reflog                         # 显示所有的版本
git reset --hard dc72730           # 即可恢复到原来的版本

5. 建立远程仓库

  • 在网页上的操作

    • GitHub 上注册账号
    • 点击 new
    • 名字自定义,例如gitroot,然后选中Public,点击Createrepository按钮
    • 添加key:单击右上角自己的头像,在下拉菜单中选择settings选项
    • 在跳转的页面中左侧菜单栏选择SSH and GPG keys,右侧单击New SSH key按钮,把Linux机器上的/root/.ssh/id_rsa.pub内容粘贴到这里。
  • 在Linux主机上的操作

    ssh-keygen                    # 生成密钥
    git remote add origin url     # url 是在GitHub上复制的
    git push -u origin master     # 将本地仓库推送到远程仓库
    git remote add origin git@github.com:g-x-mz/testing.git
    cd /opt/
    git clone url                 # 将远程仓库克隆到本地
    git clone git@github.com:g-x-mz/hello-world.git
    [在本地仓库操作完数据后,需要 git push 才能和远程同步!!]
    

6. git 分支

  • 分支操作

    git branch           # 查看分支
       * master          # 星号代表当前在那个分支位置
    git branch lsk  	 # 创建分支
    git checkout lsk 	 # 切换到了lsk分支下
    
  • 分支的合并

    git checkout master	 # 合并分支之前,先切换到目标分支 
    git merge lsk  	     # 把 lsk 分支合并到了 master
    ## 若有了分支冲突,则手动更改冲突文件,然后再提交和增加即可
    
  • 分支删除

    git  branch -d lsk	# 删除分支
    git branch -D lsk   # 如果分支没有合并,就不能删除,该命令强制删除
    
  • 对于分支的应用,建议大家以这样的原则来:

    • master分支是非常重要的,线上发布代码用这个分支,平时我们开发代码不要在这个分支上
    • 创建一个dev分支,专门用作开发,只有当发布到线上之前,才会把dev分支合并到master。
    • 开发人员应该在dev的基础上再分支成个人分支,个人分支(在自己PC上)里面开发代码,然后合并到dev分支。

⑤ 远程分支

# git ls-remote origin    //查看远程分支
# git push origin branch-name //将本地的特定分支推送到远程
# git pull //如果 push 失败,可以试试这个,然后再 push
# git checkout -b branch-name origin/branch-name //git clone 的时候,默认只把 master 分支克隆下来。如果想,要克隆其他分支,用这个命令。

7. git 标签

标签类似于快照功能,可以给版本库打一个标签,记录某个时刻库的状态。也可以随时恢复到该状态。

git tag v1.o                         # 建立一个名为 v1.o 的标签,在 master 分支上
git tag -a tag-name -m "expression"  # 对标签进行描述
git tag tag-name hash-key            # 针对历史 hash 值打标签

git show v1.o                        # 查看标签的详细信息
git tag                              # 查看所有的标签名
git log --oneline --abbrev-commit    # 查看历史 commit 

git rest --hard tag-name			# 回到指定标签版本

git tag -d tag-name                  # 删除标签

git push origin tag-name             # 推送指定标签到远程
git push --tag origin                # 推送所有标签
既要删除本地标签又要删除远程标签
git tag tag-name -d
git push origin :refs/tags/tag-name

8. git 别名

# git config --global alias.ci commit  //将 commit 改名为 ci
# git config --list | grep alias  //查看已设别名
# git config --global --unset alias.ci //取消 ci 别名
**查询 log 小技巧
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
2.6 git 服务器的搭建
//找一台服务器,首先要安装Git
# yum install git
# git config --global user.name "lsk"				//配置基本信息
#git config --global user.email "example@qq.com"

//添加git用户,并且设置shell为/usr/bin/git-shell,目的是为了不让git用户远程登陆
# useradd -s /usr/bin/git-shell git
# cd /home/git
//创建authorized_keys文件,并更改属主、属组和权限,用来存客户端机器上的公钥
# mkdir .ssh
# touch .ssh/authorized_keys
# chown -R git.git .ssh
# chmod 600 .ssh/authorized_keys
# ll /home/git/.ssh/authorized_keys 
-rw-------. 1 git git 1226 Aug  5 07:03 /home/git/.ssh/authorized_keys

//定好存储Git仓库的目录,比如 /data/gitpub
# mkdir /data/gitpub
# cd /data/gitpub
# git init --bare sample.git 	//会创建一个裸仓库,裸仓库没有工作区,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以.git结尾
# chown -R git.git sample.git
# ll 
total 4
drwxr-xr-x. 7 git git 4096 Aug  5 10:01 sample.git
【客户端的操作如下】
//首先要把客户端上的公钥放到git服务器/home/git/.ssh/authorized_keys文件里
 //在客户端上克隆远程仓库
# git clone git@ip:/data/gitpub/sample.git

9. gitlab 的使用

  • 下载安装软件

    vim /etc/yum.repos.d/gitlab.repo		
    [输入内容如下]
    [gitlab-ce]
    name=Gitlab CE Repository
    baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/
    gpgcheck=0
    enabled=1
    [精致的结尾]
    yum install -y gitlab-ce
    gitlab-ctl reconfigure       # 重新加载
    netstat -lnpt  			    # 查看监听端口,主要查看 Nginx 的监听端口
    gitlab-ctl start
    #####
    # 也可以安装官网的方式进行部署 https://about.gitlab.com/install/#centos-7
    
  • 网页上操作

    # 在网页上输入 https://192.168.80.140:443 ,然后进行相应的操作即可,默认管理员root,无密码,它会让我们去定义一个密码,至少8位数
    # GitLab常用命令  https://www.cnyunwei.cc/archives/1204
    
  • 将本地仓库推向远程

    # 首先在网页上建立好组和项目,然后根据项目上的提示操作Linux虚拟机。在Linux虚拟机上生成公钥,然后进行推送即可,若推送有问题,则需要修改配置文件
    vim /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml
    --------------------------------------------------------------------
    ## GitLab settings
      gitlab:
        ## Web server settings (note: host is the FQDN, do not include http://)
        host: localhost         >> 这里改为主机的IP即可
        port: 443
        https: false
    --------------------------------------------------------------------
    # 然后将 origin 用户删除,刷新网页,获得新的 URL,创建用户 origin,再次推送即可。
    
  • 开发者向仓库推送文件

    # 首先先将仓库内的内容下载下来
    # 然后再根据要求进行相应的上传操作
    # 还可以在网页上配置 master 分支受保护,在仓库建立新的分支后,开发者并不会收到相应的信息,需要用 git pull 刷新一下
    # 开发者也可以通过网页向仓库请求合并分支
    
//GitLab备份  
# gitlab-rake gitlab:backup:create		//创建备份压缩包
//备份目录在/var/opt/gitlab/backups
# ls /var/opt/gitlab/backups/
# gitlab-ctl stop unicorn ; gitlab-ctl stop sidekiq
# gitlab-rake gitlab:backup:restore BACKUP=xxxxx //(这里是一个编号,即备份文件的前缀)	//恢复备份
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值