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
# 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参数 指定标签