zoukankan      html  css  js  c++  java
  • 15.Git版本控制系统

    Git

    1.Devops

    1)简介

    ​ DevOps 是一个完整的面向IT运维的工作流,以 IT 自动化以及持续集成(CI)、持续部署(CD)为基础,来优化程式开发、测试、系统运维等所有环节。

    2)概念

    ​ DevOps一词的来自于Development(开发)和Operations(运维)的组合,突出重视软件开发人员和运维人员的沟通合作,通过自动化流程来使得软件构建、测试、发布更加快捷、频繁和可靠

    3)作用

    ​ 提高产品质量

    ​ 1 自动化测试

    ​ 2 持续集成

    ​ 3 代码质量管理工具

    ​ 4 程序员鼓励师

    2.Git版本控制系统

    1)简介

    ​ 版本控制系统是一种记录一个或若干个文件内容变化,以便将来查阅特定版本内容情况的系统

    ​ 记录文件的所有历史变化

    ​ 随时可恢复到任何一个历史状态

    ​ 多人协作开发

    2)常见版本管理工具

    ​ (1)SVN

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

    ​ (2)Git

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

    3.Git安装

    1)系统环境准备

    ​ (1)查看系统版本信息

    ​ [root@sc ~]# cat /etc/redhat-release

    ​ CentOS Linux release 7.8.2003 (Core) #CentOS 7

    ​ (2)查看内核信息

    ​ [root@sc ~]# uname -r

    ​ 3.10.0-1127.el7.x86_64 #CentOS 7是3.10.0版本,CentOS 6是2.6.32版本

    ​ (3)确认Selinux为关闭状态

    ​ 1.查看当前Selinux状态:[root@sc ~]# getenforce

    ​ 2.若为开启状态,需要关闭Selinux

    ​ [root@sc ~]# setenforce 0 #暂时关闭

    ​ 永久关闭,防止开机自启:

    ​ 可以编辑vim /etc/selinux/config 更改 SELINUX=disabled 保存退出

    ​ 或直接替换文件第7行:sed -i '7c SELINUX=disabled' /etc/selinux/config

    ​ (4)关闭防火墙服务 CentOS 7防火墙服务firewalld CentOS 6防火墙服务iptables

    ​ 1.查看当前firewalld状态:systemctl status firewalld

    ​ 2.关闭firewalld:

    ​ systemctl stop firewalld #暂时关闭

    ​ systemctl disable firewalld #禁止开机启动

    2)安装git

    ​ (1)查看当前的git版本 #系统默认有git,如果没有下载yum install git

    ​ [root@sc ~]# git --version
    ​ git version 1.8.3.1

    3)配置git使用用户信息 #提交代码显示自己信息,得知道是谁提交的

    ​ (1)查看当前的配置

    ​ [root@oldboyedu ~]# git config --list

    ​ 或 [root@oldboyedu ~]# cat .gitconfig

    ​ (2)配置使用用户信息

    ​ 1.git config #命令用法

    ​ 使用全局配置文件: git config --global

    ​ 使用系统级配置文件: git config --system

    ​ 使用版本库配置文件:git config --local #针对仓库

    ​ 2.我们使用全局配置,都用自己信息:

    ​ git config --global user.name'jiayinghe’ #配置自己名字

    ​ git config --global user.email‘yinghelail@163.com’ #配置自己邮箱

    ​ git config --global color.ui true #配置语法高亮

    ​ 可以编辑隐藏文件.gitconfig进行修改。

    4.初始化目录为git仓库 git init

    1)初始化工作目录、或者对已存在的目录都可进行初始化

    ​ 创建git_data目录:

    ​ [root@oldboyedu ~]# mkdir git_data

    ​ 到git_data下初始化目录:

    ​ [root@oldboyedu ~]# cd git_data/

    ​ [root@oldboyedu git_data]# git init # 初始化目录

    ​ Reinitialized existing Git repository in /root/git_data/.git/

    ​ 重新初始化 现有的 git 仓库 在隐藏文件.git

    2)隐藏文件.git介绍

    ​ branches # 分支目录

    ​ config # 定义项目特有的配置选项

    ​ description # 仅供git web程序使用

    ​ HEAD # 指示当前的分支 ,相当于快照,指向哪个版本就恢复到哪个版本

    ​ hooks # 包含git钩子文件

    ​ info # 包含一个全局排除文件(exclude文件)

    ​ objects # 存放所有数据内容(哈希字串,里面代码但不到,只能通过下载能看)有info和pack两个子文件夹

    ​ refs # 存放指向数据(分支)的提交对象的指针

    ​ index # 保存暂存区信息,在执行git init的时候,这个文件还没有

    5.Git常规使用

    1)创建数据-提交数据

    ​ (1)git目录主要分三个目录:

    ​ 工作目录:(当前目录)

    ​ 暂存区域:(index)可以临时储存工作目录提交的数据

    ​ 本地仓库:(objects)

    ​ (2)提交数据步骤:

    ​ 1.首先在工作目录创建数据文件:例如1.txt

    ​ 2.把数据文件1.txt提交到暂存区域

    ​ 3.把暂存区域的数据提交到本地仓库,到这里数据文件算是备份完成

    6.git基础命令

    ​ 1)git init #初始化仓库

    ​ 2)git status # 查看当前仓库的状态 ,保持目前仓库是干净的(没有新文件 没有修改的状态),会经常使用,操作一次用一次

    ​ 3)git add file # 提交工作目录文件到暂存区

    ​ 4)git add . 或* #添加目录中所有改动过的文件到暂存区

    ​ 5)git checkout -- file # 让暂存区的内容覆盖工作目录的文件

    ​ 6)git rm --cached file # 删除暂存区的内容

    ​ 7)git rm file # 删除工作目录的文件

    ​ 8)git rm -f file # 同时删除工作区和暂存区的文件

    ​ 9)git commit -m "对提交文件做一个描述"#提交暂存区文件到本地仓库,同时做个描述(m:message信息)

    ​ 10)git diff #比对工作区和暂存区的内容

    ​ 11)git diff --cached # 比对暂存区和本地仓库的内容

    7.git命令的增、删、改、查

    1)增 #把文件提交到本地仓库

    ​ [root@sc git_data]# touch 2.txt #工作目录创建文件

    ​ [root@sc git_data]# git add . #将2.txt提交到缓存区

    ​ [root@sc git_data]# git commit -m "create 2.txt" #将文件提交到本地仓库

    2)删除文件 #只要对被管理的文件进行操作后 都必须得git add git commit 提交 才能生效

    ​ [root@sc git_data]# git rm 2.txt #删除工作目录文件 ll查看工作目录已经没有文件

    ​ [root@sc git_data]# git status #查看当前仓库状态,发现仓库并不干净,删除操作有问题

    ​ # On branch master

    ​ # Changes to be committed:

    ​ # (use "git reset HEAD ..." to unstage) #根据提示可以找回被删除的文件

    ​ # deleted: 1.txt

    ​ 解决问题:需要重新提交文件到本地仓库备份,才真正删除工作目录文件

    ​ [root@sc git_data]# git add .

    ​ [root@sc git_data]# git commit -m "delect 1.txt"

    ​ [root@sc git_data]# git status #再查看当前仓库状态,变干净了

    3)改文件(内容或名字)#与删除文件一样,也需要git add git commit 提交 才能生效

    ​ [root@sc git_data]# git mv 2.txt 3.txt #改名

    ​ [root@sc git_data]# git status #查看当前仓库状态,发现仓库并不干净,改名操作有问题

    ​ [root@sc git_data]# git add .

    ​ [root@sc git_data]# git commit -m "delect 1.txt"

    4)查文件

    ​ (1)git diff #比对工作区和暂存区的内容

    ​ [root@sc git_data]# echo 222 >> 3.txt #对工作目录下文件修改

    ​ [root@sc git_data]# git diff #比对工作区和暂存区的内容,前提缓存区中已经有文件

    ​ diff --git a/3.txt b/3.txt

    ​ index 58c9bdf..a30a52a 100644

    ​ --- a/3.txt

    ​ +++ b/3.txt

    ​ @@ -1 +1,2 @@

    ​ 111

    ​ +222 #增加了222

    ​ (2)git diff --cached # 比对暂存区和本地仓库的内容

    ​ [root@sc git_data]# git add . #先将文件提交到缓存区

    ​ [root@sc git_data]# git diff --cached #比对暂存区和本地仓库的内容

    8.恢复历史数据

    1)查看历史的git commit快照操作(查看本地仓库历史数据)

    ​ git log #显示所有数据详细信息

    ​ git log -2 #只显示前2条信息(下面俩命令同样适用)

    ​ git log ‐‐oneline # 一行简单的显示commit信息

    ​ git log ‐p # 显示具体内容的变化

    2)恢复历史数据

    ​ (1)只更改了当前共工作目录文件,可从暂存区把文件找回

    ​ [root@sc git_data]# echo 333 >> 3.txt #修改当前目录文件

    ​ [root@sc git_data]# git status #查看当前状态,有可撤回文件提示

    ​ [root@sc git_data]# git checkout -- 3.txt #把暂存区文件覆盖本地工作目录

    ​ (2)修改了本地目录且同时提交到了暂存区,可从本地仓库一步一步找回

    ​ [root@sc git_data]# echo 333 >> 3.txt #修改当前目录文件

    ​ [root@sc git_data]# git add * #把修改过的文件提交到暂存区

    ​ [root@sc git_data]# status #查看当前状态,有可撤回文件提示

    ​ [root@sc git_data]# git reset HEAD 3.txt #把本地仓库文件夹覆盖暂存区域

    ​ [root@sc git_data]# status #查看当前状态,有可撤回文件提示

    ​ [root@sc git_data]# git checkout -- 3.txt #把暂存区文件覆盖本地工作目录

    ​ (3)修改了工作目录后提交到了暂存区和本地仓库后进行数据恢复(数据进行了快照)

    ​ [root@sc git_data]# echo 333 >> 3.txt #修改当前目录文件

    ​ [root@sc git_data]# git add * #把修改过的文件提交到暂存区

    ​ [root@sc git_data]# git commit -m "文件3.txt增加了333" #把文件提交到本地仓库

    ​ [root@sc git_data]# echo 444 >> 3.txt #再次修改当前目录文件

    ​ [root@sc git_data]# git add * #把修改过的文件提交到暂存区

    ​ [root@sc git_data]# git commit -m "文件3.txt增加了444" #把文件提交到本地仓库

    突然发现第二次文件修改错了,想要退回到第一次修改的文件
    办法:更改HEAD的版本指针到上一个版本 #默认的HEAD版本指针会指向到最近的一次提交版本记录

    ​ 1.首先查看历史版本信息:

    ​ [root@sc git_data]# git log --oneline

    ​ ef8eecd 文件3.txt增加了444 #当前指针位置

    ​ 8870abe 文件3.txt增加了333 #8870abe哈希字串,每次提交都要唯一的哈希字串

    ​ f24717e 追加内容

    ​ [root@sc git_data]# git log --oneline --decorate #可查看当前HEAD指针位置在哪

    ​ 8870abe (HEAD, testing, master) 文件3.txt增加了333

    ​ 2.将指针指向我们想要恢复的版本(增加了333),直接将文件恢复到工作目录

    ​ [root@sc git_data]# git reset --hard f24717e #恢复数据(手误恢复了错误数据)

    ​ [root@sc git_data]# cat 3.txt #打开文件发现回退错了,应该回退到333版本

    ​ 111

    ​ 222

    ​ [root@sc git_data]# git log --oneline #这时再次查看历史版本信息,发现没有333版本了

    原因很简单,因为我们当前的工作版本是历史的一个提交点,这个历史提交点还没有发生过333 444 更新记录,所 以当然就看不到了,要是想”还原到未来”的历史更新点,可以用git reflog命令来查看所有的历史记录(reset重置复位与commit提交的数据)

    ​ [root@sc git_data]# git reflog #查看所有的历史记录

    ​ f24717e HEAD@{0}: reset: moving to f24717e

    ​ ef8eecd HEAD@{2}: commit: 文件3.txt增加了444

    ​ 8870abe HEAD@{3}: commit: 文件3.txt增加了333

    ​ [root@sc git_data]# git reset --hard 8870abe #恢复333版本数据

    ​ [root@sc git_data]# cat 3.txt #查看正确

    9.创建新的分支

    1)为什么要创建新分支

    ​ 一般在实际的项目开发中,我们要尽量保证master主分支是非常稳定的,仅用于发布新版本,平时不要随便直接修改里面的数据文件,而工作的时候则可以新建不同的工作分支,等到工作完成后在合并到master朱分支上面。

    2)创建新分支

    ​ [root@git git_data]# git branch testing # 新建testing分支

    ​ [root@git git_data]# git branch # 查看所有分支,*号在哪里就说明当前在哪个分支上

    3)切换分支

    ​ [root@git git_data]# git checkout testing # 切换到testing分支

    ​ [root@git git_data]# git branch #当前*在testing上

    ​ [root@git git_data]# git checkout -b dev #创建并切换到dev分支

    4)删除分支:-d

    ​ [root@git git_data]# git branch ‐d testing #删除分支 -d 参数指定分支

    10.分支合并到主分支

    ​ [root@git git_data]# git merge testing #在主分支选择要合并的分支,合并之后删除分支

    ​ 合并冲突:俩开发提交同一个文件,修改的内容在同一行不一样时,发生合并冲突

    ​ 办法:手动编辑文件(冲突的文件自动标识到文件里),保留想要的内容,然后重新提交

    ​ git commit ‐am "merge testing to master"

    11.git标签使用

    1)作用:给数据文件做标签,恢复历史数据的时候,不需要加唯一字符串(不好记),只需要指定标签名就可以完成操作
    2)添加标签格式:

    ​ git tag ‐a v1.0 ‐m " version v1.0“ # -a指定标签名称,-m文字说明,给当前指针指向文件做标签

    ​ git tag -a v1.1 a9e24ab -m "v1.1" # 指定某个版本打标签(哈希值方式指定)

    3)查看标签

    ​ [root@git git_data]# git tag #查看所有标签

    ​ v1.0

    ​ v2.0

    ​ [root@git git_data]# git show v1.0 # 查看标签v1.0的信息

    4)还原历史数据

    ​ [root@git git_data]# git reset ‐‐hard v2.0 # 直接还原数据到v2.0 版本

    5)删除标签:-d

    ​ [root@git git_data]# git tag ‐d v2.0 # 删除标签 ‐d参数 指定标签

  • 相关阅读:
    C++对象模型
    C/C++内存结构
    第一篇
    Goodbye Steve(19552011)
    DirectX学习笔记_关于Sprite.Draw2D的说明
    Goodbye World!
    js把一个数组的数据平均到几个数组里面
    Django model字段类型清单
    Golang中间件——goredis操作Redis
    Python开发一个短网址生成器
  • 原文地址:https://www.cnblogs.com/jia-shu/p/13987000.html
Copyright © 2011-2022 走看看