【devops】devops-git之介绍以及日常使用

 本站以分享各种运维经验和运维所需要的技能为主

《python零基础入门》:python零基础入门学习

《python运维脚本》: python运维脚本实践

《shell》:shell学习

《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战

《k8》从问题中去学习k8s

《docker学习》暂未更新

《ceph学习》ceph日常问题解决分享

《日志收集》ELK+各种中间件

《运维日常》运维日常

《linux》运维面试100问

《DBA》db的介绍使用(mysql、redis、mongodb...)

Git安装及基础命令使用

一、版本控制系统

1.什么是版本控制系统

记录一个或多个变化的过程,以便随时会到某个时间点
#功能:
1.记录文件的历史变化
2.可以随时回到任何一个时间点
3.多人协作开发

2.为什么要用版本控制系统

版本控制是指在软件开发过程中对各种程序代码、配置文件及说明文档等文件变更的管理,版本控制系统能够随着时间的推进记录一系列文件的变化,方便以后随时回退到某个版本

3.版本并发控制类型

1)本地版本控制系统
平时开发不使用版本控制系统的情况下,我们习惯用复制整个项目目录的方式来保存不同的版本,或许还会改名加上备份时间以示区别。这种方式需要对项目频繁进行复制,最终整个工作区会比较臃肿混乱且时间一长很难区分项目之间的差异。为了解决这个问题,人们开发了本地版本控制系统,大多都是采用某种简单的数据库来记录文件的历次更新差异。最流行的是RCS,它的工作原理是在硬盘上保存补丁集(补丁指文件修订前后的变化),通过应用所有的补丁,可以重新计算出各个版本的文件内容。本地版本控制系统一定程度上解决了手动复制粘贴代码的问题,但无法解决多人协作的问题。

img

2)集中式版本控制系统
集中式版本控制系统的出现是为了解决不同系统上的开发者协同开发,即多人协作的问题,主要有 CVS 和 SVN。集中式版本控制系统有一个单一的集中管理的中央服务器,保存所有文件的修订版本,由管理员管理和控制开发人员的权限,而协同工作的人们通过客户端连到中央服务器,从服务器上拉取最新的代码,在本地开发,开发完成再提交到中央服务器。

img

#集中式版本控制系统有许多优点:
1.操作比较简单,只需要拉取代码,开发,提交代码。
2.基本解决多人协作问题,每个人都可以从服务器拉取最新代码了解伙伴的进度。
3.同时管理员可以轻松控制各开发者的权限。
3.只需要维护中央服务器上的数据库即可。#缺点也很明显:
1.本地没有全套代码,没有版本信息,提交更新都需联网跟服务器进行交互,对网络要求较高。
2.集中式的通病:风险较大,服务器一旦宕机,所有人无法工作,服务器磁盘一旦损坏,如果没有备份将丢失所有数据。
3)分布式版本控制系统
分布式版本控制系统很好地解决了集中式版本控制系统的缺点。首先,在分布式版本控制系统中,系统保存的不是文件变化的差量,而是文件的快照,即把文件的整体复制下来保存,其次,最重要的是分布式版本控制系统是去中心化的,当你从中央服务器拉取下来代码时,拉取的是一个完整的版本库,不仅仅是一份生硬的代码,还有历史记录,提交记录等版本信息,这样即使某一台机器宕机也能找到文件的完整备份。Git 是 Linux 发明者 Linus 开发的一款分布式版本控制系统,是目前最为流行和软件开发者必须掌握的工具。

img

二、安装git

1.环境准备

主机IP配置
git10.0.0.803G内存

2.基本优化

#关闭selinux和防火墙
#时间同步
[root@git ~]# ntpdate time1.aliyun.com

3.安装git

[root@git ~]# yum install -y git[root@git ~]# git config
--global	use global config file			#使用全局的配置文件
--system	use system config file			#使用系统的配置文件
--local		use repository config file		#使用版本库的配置文件

4.创建git的用户

#配置用户
[root@git ~]# git config --global user.name "lhd"
#配置用户邮箱
[root@git ~]# git config --global user.email "1240206455@qq.com"
#显示语法高亮
[root@git ~]# git config --global color.ui true#查看全局配置
[root@git ~]# git config --list
user.name=lhd
user.email=1240206455@qq.com
color.ui=true
#生成了一个文件
[root@git ~]# cat .gitconfig
[user]name = lhdemail = 1240206455@qq.com
[color]ui = true

5.初始化git

#初始化需要工作目录
[root@git ~]# mkdir git_data#初始化
[root@git ~]# cd git_data/
[root@git git_data]# git init .
Initialized empty Git repository in /root/git_data/.git/#初始化会生成多个文件
[root@git git_data]# ll .git/
total 12
drwxr-xr-x 2 root root   6 Sep 17 16:13 branches			#分支目录
-rw-r--r-- 1 root root  92 Sep 17 16:13 config				#配置文件
-rw-r--r-- 1 root root  73 Sep 17 16:13 description			#程序使用的文件
-rw-r--r-- 1 root root  23 Sep 17 16:13 HEAD				#版本指针
drwxr-xr-x 2 root root 242 Sep 17 16:13 hooks				#钩子文件
drwxr-xr-x 2 root root  21 Sep 17 16:13 info				#排除文件
drwxr-xr-x 4 root root  30 Sep 17 16:13 objects				#存放数据的子文件
drwxr-xr-x 4 root root  31 Sep 17 16:13 refs				#数据指针

三、git介绍

1.git组成

1.工作区 (workspace)就是我们当前工作空间,也就是我们当前能在本地文件夹下面看到的文件结构。初始化工作空间或者工作空间 clean 的时候,文件内容和 index 暂存区是一致的,随着修改,工作区文件在没有 add 到暂存区时候,工作区将和暂存区是不一致的。2.暂存区 (index)老版本概念也叫 Cache 区,就是文件暂时存放的地方,所有暂时存放在暂存区中的文件将随着一个 commit 一起提交到 local repository 此时 local repository 里面文件将完全被暂存区所取代。暂存区是 git 架构设计中非常重要和难理解的一部分。3.本地仓库 (local repository)git 是分布式版本控制系统,和其他版本控制系统不同的是他可以完全去中心化工作,你可以不用和中央服务器 (remote server) 进行通信,在本地即可进行全部离线操作,包括 log,history,commit,diff 等等。完成离线操作最核心是因为 git 有一个几乎和远程一样的本地仓库,所有本地离线操作都可以在本地完成,等需要的时候再和远程服务进行交互。4.远程仓库 (remote repository)中心化仓库,所有人共享,本地仓库会需要和远程仓库进行交互,也就能将其他所有人内容更新到本地仓库把自己内容上传分享给其他人。结构大体和本地仓库一样。

img

2.git的四种状态

#文件在不同的操作下可能处于不同的 git 生命周期1.Untracked		#未跟踪1)新建的文件,还没有被git管理过2)将文件从git跟踪管理中删除,那么readme处于unstacked状态2.Staged		#已暂存1)文件已经使用git add提交到暂存区2)然后在对modifed状态的文件执行git add命令,那么readme文件又变成staged状态3.Unmodified	#未修改1)将处于staged状态的文件git commit到仓库,那么文件处于unmodified状态4.Modified		#已修改1)如果当前文件正处于unmodified状态,然后修改工作区的文件,那么文件变为modifed状态

img

四、git基础命令

1.查看状态

[root@git git_data]# git status
# On branch master				# 暂存区数据
#
# Initial commit				# 未跟踪			
#
nothing to commit (create/ files and use "git add" to track)

2.文件操作

1)新建文件
[root@git git_data]# touch {1,2,3}
[root@git git_data]# ll
total 0
-rw-r--r-- 1 root root 0 Sep 17 16:38 1
-rw-r--r-- 1 root root 0 Sep 17 16:38 2
-rw-r--r-- 1 root root 0 Sep 17 16:38 3
2)提交文件
#提交文件到暂存区
[root@git git_data]# git add 1
[root@git git_data]# git status#提交所有工作区域的文件
[root@git git_data]# git add .
[root@git git_data]# git status#提交暂存区文件到本地仓库
git commit -m "提交注释"
3)删除文件
1>将暂存区的文件移除
[root@git git_data]# git rm --cache 1
rm '1'
[root@git git_data]# git status
2>删除工作目录的文件
[root@git git_data]# rm -rf 1
[root@git git_data]# git status
3>同时删除
#同时删除暂存区和工作区的文件
[root@git git_data]# git rm -f 2
rm '2'
[root@git git_data]# git status	
4)提交到仓库
#将暂存区的文件提交到仓库
[root@git git_data]# git commit -m "add new file 3"
[master (root-commit) a4566ae] add new file 31 file changed, 0 insertions(+), 0 deletions(-)create mode 100644 3-m		#注释#查看状态,没有可提交的内容
[root@git git_data]# git status
# On branch master
nothing to commit, working directory clean
5)修改文件
1>重命名
#方式一:
1.本地重命名
[root@git git_data]# mv 3 3.txt
[root@git git_data]# git status2.从暂存区删除文件
[root@git git_data]# git rm --cached 3
rm '3'3.再次提交文件
[root@git git_data]# git add 3.txt
[root@git git_data]# git status4.提交到本地仓库
[root@git git_data]# git commit -m "rename 3.txt"
2>同时修改
1.同时修改暂存区和工作目录的文件名字
[root@git git_data]# git mv 3.txt 3
[root@git git_data]# git status2.提交本地仓库
[root@git git_data]# git commit -m "rename 3 too"
6)对比文件
git status 只能查看区域的状态的不同,不能查看内容是否相同git diff	#可以查看文件的不同# 对比工作目录和暂存区的文件
[root@git git_data]# git diff 3
diff --git a/3 b/3
index 573541a..58c9bdf 100644
--- a/3
+++ b/3
@@ -1 +1 @@
-0
+111# 对比本地仓库和暂存区的数据
[root@git git_data]# git diff --cached 3
diff --git a/3 b/3
index 573541a..58c9bdf 100644
--- a/3
+++ b/3
@@ -1 +1 @@
-0
+111

3.提交历史

当我们执行git commit后,发现代码错了,需要回滚
git任何操作都相当于做快照,我们可以恢复到任意时刻
1)查看历史
[root@git git_data]# git log 
commit 43f49f38976593194516ab68228faaa09b746270
Author: lhd <1240206455@qq.com>
Date:   Thu Sep 17 17:09:21 2020 +0800modified 3commit 90f573fa6524704cc3457cd3e3a1ccb24e5230ef
Author: lhd <1240206455@qq.com>
Date:   Thu Sep 17 16:58:06 2020 +0800rename 3 too
2)查看简单的历史提交
[root@git git_data]# git log --oneline 
43f49f3 modified 3
90f573f rename 3 too
5d61056 rename 3.txt
a4566ae add new file 3
3)查看当前分支
[root@git git_data]# git log --oneline --decorate
43f49f3 (HEAD, master) modified 3
90f573f rename 3 too
5d61056 rename 3.txt
a4566ae add new file 3
4)查看提交的详细信息
[root@git git_data]# git log -p
5)显示最近提交的数据
[root@git git_data]# git log --oneline  -2			# 只显示两行
43f49f3 modified 3
90f573f rename 3 too
6)恢复了历史数据
1>暂存区数据取出至工作区
#从暂存区将数据取出
[root@git git_data]# git checkout -- 3
2>修改了工作区并且提交到了暂存区
# 回到上一次提交的节点(也就是本地仓库退回暂存区)
[root@git git_data]# git reset HEAD 3
Unstaged changes after reset:
M	3#从暂存区将数据取出(将暂存区数据取出至工作区)
[root@git git_data]# git checkout -- 3
[root@git git_data]# git diff 3
3>修改了工作区并且提交到了暂存区在提交到了本地仓库
1.修改文件并一路提交到本地仓库
[root@git git_data]# echo 333 > 3
[root@git git_data]# git add 3
[root@git git_data]# git commit -m "错误的提交"
[master 3044a5a] 错误的提交1 file changed, 1 insertion(+), 1 deletion(-)2.发现错误,想要回滚
#查看提交历史
[root@git git_data]# git log --oneline 
3044a5a 错误的提交
43f49f3 modified 3
90f573f rename 3 too
5d61056 rename 3.txt
a4566ae add new file 3
​
3.使用指针回到上一次提交的时间点
[root@git git_data]# git reset --hard 43f49f3
HEAD is now at 43f49f3 modified 3
[root@git git_data]# git log --oneline --decorate
43f49f3 (HEAD, master) modified 3
90f573f rename 3 too
5d61056 rename 3.txt
a4566ae add new file 3
​
4.发现回滚错了,又看不到新提交的时间点
#查看所有的经历时间节点
[root@git git_data]# git reflog 
43f49f3 HEAD@{0}: reset: moving to 43f49f3
3044a5a HEAD@{1}: commit: 错误的提交
43f49f3 HEAD@{2}: commit: modified 3
90f573f HEAD@{3}: commit: rename 3 too
5d61056 HEAD@{4}: commit: rename 3.txt
a4566ae HEAD@{5}: commit (initial): add new file 3
​
5.回到回滚之前的时间点
[root@git git_data]# git reset --hard 3044a5a
HEAD is now at 3044a5a 错误的提交
[root@git git_data]# cat 3 
333

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/423739.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

位段、枚举、联合

位段 在一个结构体中以位&#xff08;最小单位&#xff09;为单位来指定其成员所占的内存长度。位段成员名后面有一个冒号&#xff0c;冒号后有一个数字&#xff08;这个数字是小于等于这个成员所占的位&#xff09;。 typedef struct S {char a : 2;//8char b : 8;//8char c …

java重点学习-线程池的使用和项目案例

十一 线程池的使用场景 你们项目哪里用到了多线程 批量导入:使用了线程池CountDownLatch批量把数据库中的数据导入到了ES(任意)中&#xff0c;避免OOM数据汇总:调用多个接口来汇总数据&#xff0c;如果所有接口(或部分接口)的没有依赖关系&#xff0c;就可以使用线程池future来…

Fiddler下载安装及汉化

直接上干货 1.下载地址&#xff1a; 通过百度网盘分享的文件&#xff1a;fiddler汉化&#xff0c;FiddlerSetup抓包.exe等2个文件 链接&#xff1a;https://pan.baidu.com/s/12JBZO8z0mDHlHM1DCL365g 提取码&#xff1a;1111 2.fiddler安装&#xff1a; 注意安装位置 3.汉化&…

个性化、持续性阅读 学生英语词汇量自然超越标准

2024年秋季新学年&#xff0c;根据2022版《义务教育英语课程标准》全新修订的英语新版教材开始投入使用&#xff0c;标志着我国英语教育迈入了一个以应用为导向、注重综合素养培养的新阶段。 新版教材的变革不仅仅是一次词汇量的简单增加&#xff0c;更是一场从应试到应用的深…

[数据集][目标检测]河道垃圾检测数据集VOC+YOLO格式2274张8类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;2274 标注数量(xml文件个数)&#xff1a;2274 标注数量(txt文件个数)&#xff1a;2274 标注…

使用vue2+axios+chart.js画折线图 ,出现 RangeError: Maximum call stack size exceeded 错误

目录 效果图 解决方案 修正要点 效果图 修改前App.vue代码&#xff1a; <template><div id"app"><canvas id"myChart"></canvas></div> </template><script> import axios from axios; import { Chart, regis…

QT多线程编程(基础概念以及示例)

QT多线程编程 前言&#xff1a;基础夯实&#xff1a;一:多线程概述二:QT多线程的使用1. 继承QThread类2. 继承QObject类3. QtConcurrent模块 三:线程同步与通信四:线程安全五:线程管理六:总结 效果展示&#xff1a;实现功能&#xff1a;核心代码&#xff1a;mainwindow.hmythre…

k8s 部署 ruoyi 前后端分离项目

本文视频版: https://www.bilibili.com/video/BV17ugkePEeN 参考 https://blog.csdn.net/qq_50247813/article/details/136934090 https://gitee.com/nasaa/RuoYi-Vue-cloud https://www.itsgeekhead.com/tuts/kubernetes-129-ubuntu-22-04-3/ https://kubernetes.io/docs…

【信号】SIGCHLD信号--了解

SIGCHLD是多少号信号呢&#xff1f;17号 我们知道用wait和waitpid函数清理僵尸进程,父进程可以阻塞等待子进程结束,也可以非阻塞地查询是否有子进程结束等待清理(也就是轮询的方式)。采用第一种方式,父进程阻塞了就不能处理自己的工作了;采用第二种方式,父进程在处理自己的工作…

Leetcode 二叉树中根遍历

采用递归算法&#xff0c;并且用一个向量来存储节点值。 算法C代码如下&#xff1a; /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}*…

Python库Plotly学习笔记

Plotly是一个用于创建交互式图形的Python库。它提供了丰富的图表类型&#xff0c;包括散点图、线图、柱状图、热力图、饼图等&#xff0c;以及高级的可视化功能&#xff0c;如动画、交互、数据缩放和拖动等。 Plotly库的主要特点&#xff1a; 交互式图表&#xff1a;Plotly创…

git 更新LingDongGui问题解决

今天重新更新灵动gui的代码&#xff0c;以便使用最新的arm-2d&#xff0c;本来以为是比较简单的一件事情&#xff08;因为以前已经更新过一次&#xff09;&#xff0c;却搞了大半天&#xff0c;折腾不易啊&#xff0c;简单记录下来&#xff0c;有同样遇到问题的同学参考&#x…

SSM框架学习(三、MyBatis实践:提高持久层数据处理效率)

目录 一、Mybatis简介 1.简介 2.持久层框架对比 3.快速入门&#xff08;基于Mybatis3方式&#xff09; 4.ibatis方式的实现和原理 5.ibatis与mybatis之间的关系 二、Mybatis基本使用 1.向 sql 语句传参 &#xff08;1&#xff09;mybatis日志输出配置 &#xff08;2&…

存储课程学习笔记5_iouring的练习(io_uring,rust_echo_bench,fio)

我们知道&#xff0c;在处理大量高并发网络时&#xff0c;一般考虑并发&#xff0c;以及设计对应的方案&#xff08;比如select,poll,epoll&#xff09;等。 那么如果频繁进行文件或者磁盘的操作&#xff0c;如何考虑性能和并发&#xff0c;这里就可以考虑用到io_uring。 0&a…

RK3588镜像打包制作,替换文件系统

1.在开发板上安装async apt-get async 2.在另一台linux机器上执行命令拷贝文件系统 注意&#xff1a; 这里使用root权限或者账户 mkdir rootfs rsync -avx root192.168.1.3:/ rootfs 3.制作空镜像文件 先去开发板上验证自己的系统使用了多少空间&#xff0c;然后输入命令制…

rancker 图形化界面

rancker 图形化界面 图形化界面进行k8s集群的管理 rancher自带监控————普罗米修斯 #在master和两个node上都操作 [rootmaster01 opt]# rz -E rz waiting to receive. [rootmaster01 opt]# docker load -i rancher.tar ​ #在master上操作 [rootmaster01 opt]# docker pul…

828华为云征文|华为云Flexus X搭建借贷管理系统、二次开发借贷小程序 前端源码uniapp

在华为云828 B2B企业节的盛宴中&#xff0c;Flexus X实例以其卓越的算力性能和灵活的资源配置脱颖而出。对于追求极致性能、渴望在借贷管理、电商交易等场景中脱颖而出的您来说&#xff0c;Flexus X无疑是最佳拍档。搭载创新加速引擎&#xff0c;让您的自建MySQL、Redis、Nginx…

浙大数据结构:04-树6 Complete Binary Search Tree

这道题利用了完全二叉树的性质&#xff0c;我也参考了一些代码写的。 &#xff08;自己一开始写了别的方法&#xff0c;但一直过不了最后一个测试点&#xff0c;红温了&#xff09; 机翻&#xff1a; 1、条件准备 用vector存输入的数据&#xff0c;另一个数组存输出的结果&a…

实战外网配置——光猫桥接+路由器PPPoE拨号+防火墙外网链路健康检查+外网流量负载均衡

一、适用场景&#xff1a; 1、企业规模较大时&#xff0c;1条公网带宽流量可能不足&#xff0c;需要用到多条公网出口时。 2、企业有业务需要静态ip映射&#xff0c;但是因静态ip专线价格较高&#xff0c;所以需要拨号光纤承载较多的下行流量。 3、当公网出口有多条链路&#…

学习笔记 - 知识图谱的符号表示方法

学习笔记 - 知识图谱的符号表示方法 说明&#xff1a; 首次发表日期&#xff1a;2024-09-13个人阅读学习并摘录成笔记 知识表示的相关名词定义 以下内容摘录自 Knowledge Graphs Applied 2.3小节&#xff0c;然后AI翻译人工润色。 实体&#xff08;Entities&#xff09;—表…