一、常见版本管理系统

1、SVN

    集中式的版本控制系统,只有一个中央数据仓库,如果中央数据仓库挂了或者不能访问,所有的使用者无法使用svn,无法进行提交或者备份文件

2、Git

     分布式的版本控制系统,在每个使用者电脑上就有一个完整的数据仓,没有网络依然可以使用Git,当然为了习惯及团队协作,会将本地数据同步到Git服务器或者GitHub等代码仓库

二、Git的工作模式

1、在工作目录中修改数据文件。
2、将文件的快照放入暂存区域。
3、将暂存区域的文件快照提交到Git仓库中

三、Git安装部署

1、环境准备

  1. [root@gitlab ~]# cat /etc/redhat-release
  2. CentOS Linux release 7.2. (Core)
  3. [root@gitlab ~]# uname -r
  4. 3.10.-.el7.x86_64
  5. [root@gitlab ~]# systemctl status firewalld.service
  6. firewalld.service - firewalld - dynamic firewall daemon
  7. Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
  8. Active: inactive (dead)
  9. [root@gitlab ~]# getenforce
  10. Disabled
  11. [root@gitlab ~]# hostname -I
  12. 172.19.5.63 172.16.1.63

2、Git安装配置

①安装Git、全局配置

  1. yum install git -y
  1. [root@gitlab ~]# git config --global user.name "yan xinjiang" # 配置git使用用户
  2. [root@gitlab ~]# git config --global user.email "774181401@qq.com" # 配置git使用邮箱
  3. [root@gitlab ~]# git config --global color.ui true # 语法高亮
  4. [root@gitlab ~]# git config --list # 查看全局配置
  5. user.name=yan xinjiang
  6. user.email=774181401@qq.com
  7. color.ui=true

②新建并初始化Git工作目录

  1. [root@gitlab ~]# mkdir git_data
  2. [root@gitlab ~]# cd git_data/
  3. [root@gitlab git_data]# git init
  4. 初始化空的 Git 版本库于 /root/git_data/.git/
  5. [root@gitlab git_data]# git status
  6. # 位于分支 master
  7. #
  8. # 初始提交
  9. #
  10. 无文件要提交(创建/拷贝文件并使用 "git add" 建立跟踪)

③Git基本使用

④创建数据、提交数据

  1. [root@gitlab git_data]# touch README
  2. [root@gitlab git_data]# git status
  3. # 位于分支 master
  4. #
  5. # 初始提交
  6. #
  7. # 未跟踪的文件:
  8. # (使用 "git add <file>..." 以包含要提交的内容)
  9. #
  10. # README
  11. 提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)
  12. [root@gitlab git_data]# git add README #添加文件到暂存区域
  13. [root@gitlab git_data]# git status #查看git状态
  14. # 位于分支 master
  15. #
  16. # 初始提交
  17. #
  18. # 要提交的变更:
  19. # (使用 "git rm --cached <file>..." 撤出暂存区)
  20. #
  21. # 新文件: README
  22. #
  23. [root@gitlab git_data]# git commit -m "README first commit" #git commit 提交暂存区文件README到git仓库
  24. [master(根提交) 86bc282] README first commit
  25. file changed, insertions(+), deletions(-)
  26. create mode README

⑤删除暂存区数据

  1. [root@gitlab git_data]# touch database
  2. [root@gitlab git_data]# git add database
  3. [root@gitlab git_data]# git status
  4. # 位于分支 master
  5. # 要提交的变更:
  6. # (使用 "git reset HEAD <file>..." 撤出暂存区)
  7. #
  8. # 新文件: database
  9. #
  10. [root@gitlab git_data]# git reset HEAD database #将git暂存区的追踪列表删除,并不会删除工作目录的数据文件
  11. [root@gitlab git_data]# git rm --cached database#撤出暂存区文件的另一种写法,-f参数git暂存区和工作目录数据一起删除
  12. [root@gitlab git_data]# git status
  13. # 位于分支 master
  14. # 未跟踪的文件:
  15. # (使用 "git add <file>..." 以包含要提交的内容)
  16. #
  17. # database
  18. 提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)

3、Git历史记录

①查看历史记录相关命令

  1. git log #查看提交历史记录
  2. git log -2 #查看最近几条记录
  3. git log -p -1 #显示每次提交的内容差异,例如仅查看最近一次差异
  4. git log --stat -2 #简要显示数据增改行数,这样能够看到提交中修改过的内容,对文件添加或移动的行数,并在最后列出所有增减行的概要信息
  5. git log --pretty=oneline #根据不同的格式展示提交的历史信息
  6. git log --pretty=fuller -2 #以更详细的模式输出提交的历史记录
  7. git log --pretty=fomat:"%h %cn" #查看当前所有提交记录的简短SHA-1哈希字串与提交者的姓名,其他格式见备注

format参数指定具体输出格式

  1. %s 提交说明。
  2. %cd 提交日期。
  3. %an 作者的名字。
  4. %cn 提交者的姓名。
  5. %ce 提交者的电子邮件。
  6. %H 提交对象的完整SHA-1哈希字串。
  7. %h 提交对象的简短SHA-1哈希字串。
  8. %T 树对象的完整SHA-1哈希字串。
  9. %t 树对象的简短SHA-1哈希字串。
  10. %P 父对象的完整SHA-1哈希字串。
  11. %p 父对象的简短SHA-1哈希字串。
  12. %ad 作者的修订时间

②还原历史数据

  1. #模拟提交了三次数据
  2. [root@gitlab git_data]# git log
  3. commit e92dc47b6e2d4972e45fb7be557a6bcfebd3fd2e
  4. Author: yan xinjiang <@qq.com>
  5. Date: Mon Dec :: +
  6.  
  7. README three commit
  8.  
  9. commit a3950f561fc74803d8a4dba7e4980f19a87a85e9
  10. Author: yan xinjiang <@qq.com>
  11. Date: Mon Dec :: +
  12.  
  13. README second commit
  14.  
  15. commit 86bc282a6c90e332e516a289c7c92282bdc425ac
  16. Author: yan xinjiang <@qq.com>
  17. Date: Mon Dec :: +
  18.  
  19. README first commit

此时查看README数据内容

  1. [root@gitlab git_data]# cat README
  2. heoll
  3. word

还原历史提交版本到上一次

  1. [root@gitlab git_data]# git reset --hard HEAD^ #还原历史提交版本上一次
  2. [root@gitlab git_data]# git reset --hard a3950f #根据SHA-1值,还原
  3. HEAD 现在位于 a3950f5 README second commit
  4. [root@gitlab git_data]# cat README #查看数据文件已经还原到上一次
  5. heoll
  6.  
  7. HEAD^ 还原到上次
  8. HEAD^^还原到上上次
  9. HEAD^^^
  10. HEAD~5还原到上5

        说明:上面的操作实际上就是改变了一个HEAD版本指针的位置,你将HEAD指针放在哪里,你的当前工作版本就会定位在哪里,要想把内容再还原到最新提交的版本,先查看提交版本号

③还原未来数据

      未来数据指的是还原到历史数据了,突然后悔了,想撤销更改,但是git log已经找不到这个版本了

  1. #查看未来历史更新点
  2. [root@gitlab git_data]# git reflog
  3. a3950f5 HEAD@{}: reset: moving to a3950f
  4. e92dc47 HEAD@{}: reset: moving to e92dc4
  5. a3950f5 HEAD@{}: reset: moving to HEAD^
  6. e92dc47 HEAD@{}: commit: README three commit
  7. a3950f5 HEAD@{}: commit: README second commit
  8. 86bc282 HEAD@{}: commit (initial): README first commit

4、标签使用

  1. #前面回滚使用的是一串字符串,又长又难记
  2. git tag v1.0 #当前提交内容打一个标签(方便快速回滚),每次提交都可以打个tag。
  3. git tag #查看当前所有的标签
  4. git show v1.0 #查看当前1.0版本的详细信息
  5. git tag v1.2 -m "version 1.2 release is test" #创建带有说明的标签,-a指定标签名字,-m指定说明文字
  6. git tag -d v1.0 #我们为同一个提交版本设置了两次标签,删除之前的v1.0
  1. [root@gitlab git_data]# git tag v20171218
  2. [root@gitlab git_data]# git tag
  3. v20171218
  4. #这样还原起来方便很多,根据tag标记即可以还原#
  5. [root@gitlab git_data]# git reset --hard v20171218
  6. HEAD 现在位于 a3950f5 README second commit
  7. [root@gitlab git_data]# cat README
  8. heoll

四、Git分支结构管理

1、分支结构

2、创建分支

  1. [root@gitlab git_data]# git branch linux #创建分支
  2. [root@gitlab git_data]# git status
  3. # 位于分支 master
  4. 无文件要提交,干净的工作区
  5. [root@gitlab git_data]# git checkout linux #切换分支
  6. 切换到分支 'linux'
  7. [root@gitlab git_data]# git branch #查看当前分支情况,当前分支前面有*
  8. * linux
  9. master

3、合并分支

  1. [root@gitlab git_data]# git checkout master #把分支linux的工作成果合并到master上,先切换到master
  2. 已经位于 'master'
  3. [root@gitlab git_data]# git merge linux #合并linux分支到master
  4. Already up-to-date.
  5. [root@gitlab git_data]# git branch -d linux #查看合并文件,确认合并完成后,可以删除分支linux
  6. 已删除分支 linux(曾为 b578156)。

4、合并分支冲突

①自动合并:文件没有冲突,就可以自动合并

②合并失败:文件冲突——文件的同一行有不同的内容

5、Windows客户端使用

①安装Git-2.10.0-64-bit

②windows的git,本质是window上的linux系统

五、Git服务器

 1、常见Git仓库

①使用GitHub或者码云等公共代码仓库

②使用GitLab私有仓库

 2、搭建私有仓库GitLab

  1. 安装文档 https://about.gitlab.com/downloads/#centos7
  2. https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/

①安装

  1. [root@gitlab ~]# cd /server/tools/
  2. [root@gitlab tools]# rz #上传gitlab-ce-9.1.-ce..el7.x86_64.rpm
  3. [root@gitlab tools]# ls
  4. gitlab-ce-9.1.-ce..el7.x86_64.rpm
  5. [root@gitlab tools]# rpm -ivh gitlab-ce-9.1.-ce..el7.x86_64.rpm
  6. 准备中... ################################# [%]
  7. 正在升级/安装...
  8. :gitlab-ce-9.1.-ce..el7 ################################# [%]
  9. [root@gitlab tools]# gitlab-ctl reconfigure #初始化,执行一次即可

②启动服务,浏览器输入172.19.5.63访问

  1. gitlab-ctl status/stop/start

创建项目

 项目名称

创建SSH秘钥认证

  1. [root@gitlab git_data]# ssh-keygen
  2. [root@gitlab git_data]# cat /root/.ssh/id_rsa.pub
  3. ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC1ZHmMwuVoAiCPvp5bFmKdYC05ItmaxUrZSx21FDXmUUM8GmWvB6TZotc41jccacl6w2JRz68KvpZmsY5ugqU4Mggsvm7DtriCBAG+cu/41F2BoAUy3a+2SOXoMpKXfxAx3tMfGF/VNL+WYSazhXMKIPiwro/b02X0sPeDWjZb0ZUcRTFt41Vg3dywvNS/IcJcud6SHSx6yJkjrZ1WkFrdEzj4Rg+Cw4NoQv+0GBB7ICEtdHhIcHrpFm6jINukRUJJ+m0H+2nV+gGPTUVnoGwDXCMEArgEYjfoN9PRc1t2prpB9E95/PaRcxIgGhPHoTwFoQUPxIrnopDyLcObqjyP root@gitlab

命令使用说明

  1. Command line instructions
  2. #Git global setup#
  3. git config --global user.name "Administrator"
  4. git config --global user.email "admin@example.com"
  5.  
  6. #Create a new repository#
  7. git clone git@gitlab.example.com:root/Nginx_conf.git
  8. cd Nginx_conf
  9. touch README.md
  10. git add README.md
  11. git commit -m "add README"
  12. git push -u origin master
  13.  
  14. #Existing folder#
  15. cd existing_folder
  16. git init
  17. git remote add origin git@gitlab.example.com:root/Nginx_conf.git
  18. git add .
  19. git commit
  20. git push -u origin master
  21.  
  22. #Existing Git repository#
  23. cd existing_repo
  24. git remote add origin git@gitlab.example.com:root/Nginx_conf.git
  25. git push -u origin --all
  26. git push -u origin --tags

③同步Gitlab服务器项目到本地工作目录

  1. [root@gitlab git_data]# git clone git@172.19.5.63:root/Nginx_conf.git#克隆服务端项目到本地
  2. 正克隆到 'Nginx_conf'...
  3. The authenticity of host '172.19.5.63 (172.19.5.63)' can't be established.
  4. ECDSA key fingerprint is 9c:aa:0b::a4::3f::0a:2d::::e2:5a:7d.
  5. Are you sure you want to continue connecting (yes/no)? yes
  6. Warning: Permanently added '172.19.5.63' (ECDSA) to the list of known hosts.
  7. warning: 您似乎克隆了一个空版本库。
  8. [root@gitlab git_data]# ls
  9. linux.txt Nginx_conf README

④推送本地数据到Gitlab服务器

  1. [root@gitlab git_data]# cd Nginx_conf/ #进入Nginx_conf项目下
  2. [root@gitlab Nginx_conf]# git add nginx.conf #把Nginx配置文件放于此处
  3. [root@gitlab Nginx_conf]# git commit -m "this is Blog Nginx configfile" #提交nginx.conf到git仓库
  4. [master(根提交) 9478a0f] this is Blog Nginx configfile
  5. file changed, insertions(+)
  6. create mode nginx.conf
  7. [root@gitlab Nginx_conf]# git push -u origin master #将本地代码仓库推送到gitlab服务器master分支下,第一次加上参数-u,代表关联本地与远程
  8. Counting objects: , done.
  9. Compressing objects: % (/), done.
  10. Writing objects: % (/), bytes | bytes/s, done.
  11. Total (delta ), reused (delta )
  12. To git@172.19.5.63:root/Nginx_conf.git
  13. * [new branch] master -> master
  14. 分支 master 设置为跟踪来自 origin 的远程分支 master

Gitlab服务端查看

⑤服务端创建测试数据,拉取到本地工作目录

  1. [root@gitlab Nginx_conf]# git pull #拉取服务端数据到本地
  2. remote: Counting objects: , done.
  3. remote: Compressing objects: % (/), done.
  4. remote: Total (delta ), reused (delta )
  5. Unpacking objects: % (/), done.
  6. 来自 172.19.5.63:root/Nginx_conf
  7. 9478a0f..af55ef9 master -> origin/master
  8. 更新 9478a0f..af55ef9
  9. Fast-forward
  10. Blog_url | +++++++
  11. file changed, insertions(+)
  12. create mode Blog_url
  13. [root@gitlab Nginx_conf]# ls #查看刚才拉取服务端的数据
  14. Blog_url nginx.conf

linux运维、架构之路-git版本管理的更多相关文章

  1. linux运维架构师职业规划

    1.假如你从来未接触过Linux的话,首先要做的就找一本指导书来学习.现在公认的Linux的入门书籍是“鸟哥的私房菜”,讲的很全面,鸟哥的私房菜一共分为两部,一部是基础篇,一部是服务器篇.“鸟哥的私房 ...

  2. 从苦逼到牛逼,详解Linux运维工程师的打怪升级之路

    做运维也快四年多了,就像游戏打怪升级,升级后知识体系和运维体系也相对变化挺大,学习了很多新的知识点. 运维工程师是从一个呆逼进化为苦逼再成长为牛逼的过程,前提在于你要能忍能干能拼,还要具有敏锐的嗅觉感 ...

  3. Nginx+Lua+Redis整合实现高性能API接口 - 网站服务器 - LinuxTone | 运维专家网论坛 - 最棒的Linux运维与开源架构技术交流社区! - Powered by Discuz!

    Nginx+Lua+Redis整合实现高性能API接口 - 网站服务器 - LinuxTone | 运维专家网论坛 - 最棒的Linux运维与开源架构技术交流社区! - Powered by Disc ...

  4. Linux运维企业架构实战系列

    Linux运维企业架构项目实战系列 项目实战1-LNMP的搭建.nginx的ssl加密.权限控制的实现 项目实战2-LVS.nginx实现负载均衡系列 2.1 项目实战2.1-实现基于LVS负载均衡集 ...

  5. Linux运维企业架构项目实战系列

    Linux运维企业架构项目实战系列 项目实战1—LNMP的搭建.nginx的ssl加密.权限控制的实现 项目实战2—LVS.nginx实现负载均衡系列2.1 项目实战2.1—实现基于LVS负载均衡集群 ...

  6. Linux 运维入门到跑路书单推荐

    一.基础入门 <鸟哥的Linux私房菜基础学习篇>:最具知名度的Linux入门书<鸟哥的Linux私房菜基础学习篇>,全面而详细地介绍了Linux操作系统. https://b ...

  7. 从零起步做到Linux运维经理, 你必须管好的23个细节

    “不想成为将军的士兵,不是好士兵”-拿破仑 如何成为运维经理? 一般来说,运维经理大概有两种出身:一种是从底层最基础的维护做起,通过出色的维护工作,让公司领导对这个人非常认可,同时对Linux运维工作 ...

  8. linux运维工程师面试题收集

    面试必考 mysql5和mysql6 有什么区别 mysql-server-5.5:默认引擎改为Innodb,提高了性能和扩展性,提高实用性(中继日志自动恢复) mysql-server-5.6:In ...

  9. 从零起步做到Linux运维经理,你必须管好的23个细节

    不想成为将军的士兵,不是好士兵-拿破仑 如何成为运维经理?成为运维经理需要什么样的能力?我想很多运维工程师都会有这样的思考和问题. 如何成为运维经理.一般来说,运维经理大概有两种出身,一种是从底层最基 ...

随机推荐

  1. vue树状结构(tree)

    <!DOCTYPE html> <html> <head> <title></title> <style> body { fon ...

  2. LeetCode链表简单题

    一.21合并两个有序链表 代码如下: class Solution: def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNod ...

  3. Python示例-Logging

    logging.ini日志配置文件内容示例: [loggers] keys=root,demo [handlers] keys=consoleHandler,timedRotatingFileHand ...

  4. 文件压缩、解压工具类。文件压缩格式为zip

    package com.JUtils.file; import java.io.BufferedOutputStream; import java.io.File; import java.io.Fi ...

  5. vue组件注册(极客时间Vue视频笔记)

    vue组件注册 组件是为了方便代码复用,只需引入组件即可在不同的地方使用想同的功能代码 <body> <div class="app"> <todo- ...

  6. [19/06/06-星期四] CSS基础_盒子模型

    一.盒子模型(框模型.盒模型) CSS处理网页时,它认为每个元素都在一个不可见的矩形盒子里. 为什么想象成盒子模型?因为把所有元素想象成盒子,那么我们对网页的布局就相当于摆放盒子.我们只需要把相应的盒 ...

  7. 右键windows terminal here无法进入当前目录

    很久没写水笔了,简单记一水 使用windows terminal的基本上都自己改过注册表,添加到右键windows terminal here吧,用着很方便,哪里不会点哪里. 我起初删除掉starti ...

  8. MySQL数据库生成数据库说明文档

    在半年多前为一个MySQL数据库生成过数据库说明文档,今天要重新生成一份,但是发现完全不记得当时是怎么生成的,只能在网上搜索重来一遍,所以今天特意把这个过程记录一下. 一.安装 使用MySQL数据库表 ...

  9. lb开金矿 QDUOJ 数论

    lb开金矿 QDUOJ 数论 原题链接,点我进去 题意 大家都知道lb有n个小弟(编号从2到n+1),他们可以按照规则传递信息:某天编号为i的小弟收到信息后,那么第二天他会给编号为j的小弟传达信息,其 ...

  10. python day1-requests

    一.什么是requests Requests是用python语言基于urllib编写的,采用的是Apache2 Licensed开源协议的HTTP库. 相对于urllib库(自带,无需手动安装)而言, ...