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

news2024/11/17 3:43:53

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

《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 = lhd
	email = 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 3
 1 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 status

2.从暂存区删除文件
[root@git git_data]# git rm --cached 3
rm '3'

3.再次提交文件
[root@git git_data]# git add 3.txt
[root@git git_data]# git status

4.提交到本地仓库
[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 status

2.提交本地仓库
[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 +0800

    modified 3

commit 90f573fa6524704cc3457cd3e3a1ccb24e5230ef
Author: lhd <1240206455@qq.com>
Date:   Thu Sep 17 16:58:06 2020 +0800

    rename 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.coloradmin.cn/o/2133569.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【GBase 8c V5_3.0.0 分布式数据库常用几个SQL】

1.检查应用连接数 以管理员用户 gbase&#xff0c;登录数据库主节点。 接数据库&#xff0c;并执行如下 SQL 语句查看连接数。 SELECT count(*) FROM (SELECT pg_stat_get_backend_idset() AS backendid) AS s;2.查看空闲连接 查看空闲(state 字段为”idle”)且长时间没有更…

【linux-Day3】linux下的基本指令

【linux-Day3】linux下的基本指令 linux下的基本指令&#x1f4e2;man&#xff1a;访问linux手册页&#x1f4e2;echo&#xff1a;把字符串写入指定文件中&#x1f4e2;cat&#xff1a;查看目标文件的内容&#x1f4e2;cp&#xff1a;复制文件或目录&#x1f4e2;mv&#xff1a…

【【通信协议ARP的verilog实现】】

【【通信协议ARP的verilog实现】】 eth_arp_test.v module eth_arp_test(input sys_clk , //系统时钟input sys_rst_n , //系统复位信号&#xff0c;低电平有效input touch_key , //触摸按键,用于触发开发…

【JVM】判断对象能否回收的两种方法:引用计数算法,可达性分析算法

1、引用计数算法&#xff1a; 给对象添加一个引用计数器&#xff0c;当该对象被其它对象引用时计数加一&#xff0c;引用失效时计数减一&#xff0c;计数为0时&#xff0c;可以回收。 特点&#xff1a;占用了一些额外的内存空间来进行计数&#xff0c;原理简单&#xff0c;判…

wincc利用拓展屏实现多台显示器显示单个项目配置方法详解

以下视频为完整操作教程 wincc利用拓展屏实现多台显示器显示单个项目配置方法详解 一、硬件接线 首先要保证wincc项目主机电脑要具备两个显示器接口&#xff0c;不管是VGA还是HDMI的都可以&#xff0c;让后将两台显示器接到同一台电脑上。如下图&#xff1a; 二、windows设置 …

基于python+django+vue的社区爱心养老管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于pythondjangovueMySQL的社…

设计模式重新整理

系统整理 河北王校长的 贯穿设计模式 和 王争的设计模式之美&#xff0c;希望能形成肌肉记忆 文章目录 为什么需要掌握设计模式1. 六大原则介绍1. 单一职责原则2. 开闭原则3. 里式替换原则4. 依赖倒置原则5. 接口隔离原则6. 迪米特法则 分类 单例模式适配器模式封装有缺陷的接口…

FFmpeg与OpenCV联合开发

本文讲述如何利用FFmpeg SDK与OpenCV 从RTSP流中获取图像&#xff08;OpenCV MAT 对象格式&#xff09;。 一&#xff0c;构造RTSP视频流 因为是在本机实验&#xff0c;所以我自己构造了一个RTSP流。如果你有现成的RTSP流也可以的。 实验用的源视频是黑神话悟空的《云宫讯音》…

苹果CMS vs. 海洋CMS:哪个系统更易于百度收录?

在选择网站内容管理系统&#xff08;影视网站选择那个CMS&#xff1f;&#xff09;时&#xff0c;收录效率和优化能力是关键考量因素。苹果CMS和海洋CMS都是受欢迎的选项&#xff0c;但在百度收录效果上&#xff0c;苹果CMS表现得更为出色。以下将详细探讨苹果CMS为何在百度收录…

房产销售系统|基于java和vue的房产销售系统(源码+数据库+文档)

房产销售|房地产|卖房系统 目录 基于java和vue的房产销售系统 一、前言 二、系统设计 三、系统功能设计 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕设布道师&#xff0c;…

【网络安全】-ssrf服务器请求伪造攻击-burp

SSRF攻击服务器请求伪造攻击 CSRF攻击跨站请求伪造攻击也称客户端请求伪造攻击 两种攻击最主要的区别是一个在服务器&#xff0c;一个在客户端。 文章目录 前言 什么是SSRF攻击? 1.分类&#xff1a; 针对服务器的 SSRF 攻击&#xff1a; 针对后端系统的SSRF攻击&#xff1a; …

Kafka高吞吐量的原因

文章目录 生产者&#xff08;写入数据&#xff09;顺序写入Memory Mapped Files 消费者&#xff08;读取数据&#xff09;Kafka是如何巧妙设计的? 总结 众所周知kafka的吞吐量比一般的消息队列要高&#xff0c;号称the fastest&#xff0c;那他是如何做到的&#xff0c;让我们…

Java多线程-(线程的创建,线程安全,线程状态)

第一章.创建线程的方式 1.第一种方式_extends Thread 1.定义一个自定义线程类继承Thread 2.重写run方法(run方法是用于设置线程任务的) 3.创建自定义线程类对象 4.调用Thread类中的start方法(start方法:开启线程,jvm自动执行run方法) public class MyThread extends Thread{…

【SSRF漏洞】——gopherus工具伪造

改变的确很难&#xff0c;但结果值得冒险 本文如有错误之处&#xff0c;还请各位师傅指正 目录 一.gopherus概述 二.gopherus安装使用 三.gopherus覆盖的服务 四.使用案例 web359&#xff1a; web360&#xff1a; 一.gopherus概述 Gopherus是一个专为生成Gopher协议Payloa…

Leetcode 每日一题:Count Complete Tree Nodes

写在前面&#xff1a; 今天带来一道 Leetcde Easy 的题&#xff0c;但别觉得我在水帖&#xff0c;这道题目在 Google 的面试题中甚至可以升级到 Leetcode medium to hard 的级别&#xff0c;而今天我要带来的正是他的高阶要求&#xff0c;怎么样利用 Complete Binary Tree 的特…

经典负载调制平衡放大器(LMBA)设计-从理论到ADS仿真

经典负载调制平衡放大器&#xff08;LMBA&#xff09;设计-从理论到ADS仿真 ADS工程下载&#xff1a;经典负载调制平衡放大器&#xff08;LMBA&#xff09;设计-从理论到ADS仿真-ADS工程 参考论文: An Efficient Broadband Reconfigurable Power Amplifier Using Active Load…

华为 HCIP 认证费用和报名资格

在当今竞争激烈的信息技术领域&#xff0c;华为 HCIP认证备受关注。它不仅能提升个人的技术实力与职业竞争力&#xff0c;也为企业选拔优秀人才提供了重要依据。以下将详细介绍华为 HCIP 认证的费用和报名资格。 一、HCIP 认证费用 华为HCIP认证的费用主要由考试费和培训费构成…

似然函数与先验概率、后验概率的关系

似然函数、先验概率、后验概率这三个概念是贝叶斯统计中的核心概念&#xff0c;它们共同描述了如何根据已有数据更新我们对某个事件或参数的认识。下面用简单的语言解释这三个概念&#xff0c;并描述它们之间的关系。 1. 先验概率&#xff08;Prior Probability&#xff09; …

Debian11.9镜像基于jre1.8的Dockerfile

Debian11.9基于jre1.8的Dockerfile编写 # 使用Debian 11.9作为基础镜像 FROM debian:11.9 # 维护者信息&#xff08;建议使用LABEL而不是MAINTAINER&#xff0c;因为MAINTAINER已被弃用&#xff09; LABEL maintainer"caibingsen" # 创建一个目录来存放jre …

vue中v-bind和v-model的区别和应用

1.区别 v-bind&#xff1a; vue2中&#xff0c;v-bind是单向数据绑定&#xff0c;用于动态绑定HTML属性和组件属性&#xff0c;只能将vue实例中的数据同步到HTML元素上&#xff0c;实现数据的动态更新和响应式渲染。v-bind的简写形式使用冒号前缀&#xff08;&#xff1a;&am…