【Git】Git的概念安装工作区-暂存区-版本库

文章目录

  • Git概念-版本控制器
  • Git安装
    • Centos平台&ubuntu
  • Git基本操作
    • 创建Git本地仓库
    • 配置Git
  • 认识⼯作区、暂存区、版本库
    • 添加文件
    • 查看.git文件
    • 总结
    • 添加文件场景2

Git概念-版本控制器

引入

我们在编写各种⽂档时,为了防⽌⽂档丢失,更改失误,失误后能恢复到原来的版本,不得不复制出⼀个副本,每个版本有各⾃的内容但最终会只有⼀份报告需要被我们使⽤,在此之前的⼯作都需要这些不同版本的报告,于是每次都是复制粘贴副本,产出的⽂件就越来越
多,⽂件多不是问题,问题是:随着版本数量的不断增多,你还记得这些版本各⾃都是修改了什么吗?

概念

Git本质是版本控制器,目的是能够更⽅便管理不同版本的⽂件。Git可以控制电脑上所有格式的⽂件,例如?doc、excel、dwg、dgn、rvt等等。而对于开发人员来说,Git最重要的就是可以帮助管理软件开发项目的源代码文件

注意:所有的版本控制系统,只能跟踪⽂本⽂件的改动,而不是文件本身

  • 比如:⽐如TXT⽂件,⽹⻚,所有的程序代码等等。版本控制系统可以告诉你每次的改动,⽐如在第5⾏加了⼀个单词Linux”,在第8⾏删了⼀个单词“Windows”。
  • ⽽图⽚、视频这些⼆进制⽂件,虽然也能由版本控制系统管理,但没法跟踪⽂件的变化,只能把⼆进制⽂件每次改动串起来,也就是只知道图⽚从100KB改成了120KB,到底改了啥,版本控制系统不知道,也没法知道

Git安装

Centos平台&ubuntu

sudo yum -y install git  #Centos
sudo apt-get install git -y 	#ubuntu

查看Git安装的版本:git --version


Git基本操作

创建Git本地仓库

仓库是进⾏版本控制的⼀个⽂件⽬录。我们要想对⽂件进⾏版本控制,就必须先创建⼀个仓库出来,新建仓库命令是:git init

注意:该命令要在⽂件⽬录下执⾏

image-20230614105421825

可以发现:当前⽬录下多了⼀个.git目录的隐藏文件。

注意:.git⽬录是Git来跟踪管理仓库的,不要⼿动修改这个⽬录⾥⾯的⽂件,不然改乱了,就把Git仓库给破坏了。

image-20230614105605665


配置Git

当安装Git后⾸先要做的事情是设置你的⽤⼾名称和e-mail地址配置用户名称和邮箱地址命令为:

git config[--global] user.name "Your Name"
git config[--global] user.email "email@example.com"

其中:--global是⼀个可选项。如果使⽤了该选项,表⽰这台机器上所有的Git仓库都会使⽤这个配置。因为一台服务器下可以创建多个git仓库,如果你希望在不同仓库中使⽤不同的name和email,可以不要--global选项,需要注意的是,执⾏命令时必须要在仓库⾥


查看配置的命令为:git config -l

删除对应的配置的命令为:

git config[--global] --unset user.name
git config[--global] --unset user.email

image-20230614105904450


认识⼯作区、暂存区、版本库

  • ⼯作区:是在电脑上你要写代码或⽂件的⽬录,比如上述的gitcode目录就是工作区
  • 暂存区:英⽂叫stage或index。⼀般存放在.git目录下的index文件当中(.git/index)中,暂存区有时也叫作索引
  • 版本库:⼜名仓库,.git目录虽然在gitcode目录下,但它不属于工作区,而是git的版本库,这个版本库⾥⾯的所有⽂件都可以被Git管理起来每个⽂件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。

⼯作区、暂存区和版本库之间的关系:

image-20230614112215882

  • 在创建Git版本库时,Git会为我们⾃动创建⼀个唯⼀的master分⽀,以及指向master的⼀个指针叫HEAD
  • 在工作区所做的修改包括:新增,修改,删除内容 。
  • objects:对象库。库中存储了git对象, 对象里面存放了工作区中的修改,维护了文件的版本,暂存区存的是git对象的索引。
  • commit:将暂存区的这棵树写到master分支下,master里面的这棵树存放的也是git对象的索引,HEAD是一个指针,通过这个指针就能拿到这个master这棵树,就能找到某一个文件具体修改的内容,就可以管控一个文件
  • 将工作区的修改添加到暂存区当中,将暂存区的内容提交到本地仓库当中,才能让git追踪管理本地文件。当对⼯作区修改(或新增)的⽂件执⾏git add命令时:暂存区⽬录树的⽂件索引会被更新,当执⾏提交操作git commit时:master分⽀会做相应的更新,可以简单理解为暂存区的⽬录树才会被真正写到版本库中

添加文件

在工作区新建⼀个ReadMe⽂件,可以使⽤ git add 命令可以将⽂件添加到暂存区

  • 可以添加一个/多个文件 或者目录到暂存区 git add file1 filee dir ...
  • 可以添加当前⽬录下的所有⽂件改动到暂存区 git add .

使⽤ git commit 命令将暂存区内容添加到本地仓库

  • 提交暂存区全部内容到本地仓库中: git commmit -m "message"
  • 提交暂存区的指定⽂件到仓库区: git commit file1] file2 ... -m "message"

注意:-m选项跟上描述本次提交的message信息,这部分内容绝对不能省略,并要好好描述,是⽤来记录你的提交细节,是给⼈看的

甚至可以多次add不同的⽂件,⽽只commit⼀次便可以提交所有⽂件,需要提交的⽂件是通通被add到暂存区中,然后⼀次性commit暂存区的所有修改


可以使用git log查看历史提交记录

image-20230614143241849

该命令显⽰从**最近到最远的提交⽇志**,并且可以看到我们commit时的⽇志消息,如果嫌输出信息太多,看得眼花缭乱的,可以试试加上 --pretty=oneline 参数

git log --pretty=oneline : 查看一行好看的日志信息

image-20230614143635834

每次提交都有一个commit id(版本号),它是通过哈希加密计算出来的⼀个⾮常⼤的数


查看.git文件

image-20230614144426367

  • index就是暂存区,add之后的内容都是添加到这⾥,将工作区的内容放到暂存区
  • HEAD是默认指向master分⽀的指针,⽽默认的master分⽀保存的就是当前最新的 commit id
  • objects为Git的对象库,⾥⾯包含了创建的各种版本库对象及内容当执⾏ git add 命令时,暂存区的⽬录树被更新,同时⼯作区修改(或新增)的⽂件内容被写⼊到对象库中的⼀个新的对象中,就位于".git/objects"⽬录下

注意:查找object时要将commit id分成两部分,其前2位是⽂件夹名称,后38位是⽂件名称。找到这个⽂件之后,⼀般不能直接看到⾥⾯是什么,因为该类⽂件是经过sha(安全哈希算法)加密过的⽂件,可以利用:git cat-file -p 版本号:查看版本库对象的内容

image-20230614152824144

  • parent:是上一次提交的commit id

image-20230614153153855


总结

在本地的git仓库中,有⼏个⽂件或者⽬录很特殊

  • index:暂存区, git add之后,会将工作区的内容放到暂存区
  • HEAD:默认指向master分⽀的⼀个指针
  • refs/heads/master:⽂件⾥保存当前master分支的最新commit id(版本号)
  • objects:包含了创建的各种版本库对象及内容,可以简单理解为放了git维护的所有修改

添加文件场景2

image-20230614153722344

此时提交之后,是只有⼀个⽂件改变了。原因是:git add 是将⽂件添加到暂存区,git commit 是将暂存区的内容添加到本地仓库中,但是由于并没有使⽤git add file5file5目前不不在暂存区中维护,所以我们commit的时候其实只是把已经在暂存区的file4 提交了

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

sql server表值函数

一、创建测试表 Employees 二、创建表值函数 -- DROP FUNCTION TableIntSplit;CREATE FUNCTION TableIntSplit(Text NVARCHAR(4000),Sign NVARCHAR(4000)) RETURNS tempTable TABLE(Id INT ) AS BEGIN DECLARE StartIndex INT DECLARE FindIndex INT DECLARE Content VARCHAR(…

Spring之IoC源码分析及设计思想(一)——BeanFactory

关于Spring的IOC Spring 是一个开源的 Java 平台,它提供了一种简化应用程序开发的框架。它是一个分层的框架,包括两个主要的内核:控制反转(IOC)和面向切面编程(AOP)。IOC 允许应用程序将组件之…

STM32MP157驱动开发——按键驱动(POLL 机制)

文章目录 “POLL ”机制:APP执行过程驱动使用的函数应用使用的函数pollfd结构体poll函数事件类型实现原理 poll方式的按键驱动程序(stm32mp157)gpio_key_drv.cbutton_test.cMakefile修改设备树文件编译测试 “POLL ”机制: 使用休眠-唤醒的方式等待某个…

BOB_1.0.1靶机详解

BOB_1.0.1靶机详解 靶机下载地址:https://download.vulnhub.com/bob/Bob_v1.0.1.ova 这个靶机是一个相对简单的靶机,很快就打完了。 找到ip地址后对IP进行一个单独的扫描,发现ssh端口被改到25468了,等会儿登陆时候需要用到。 目…

SQL注入原理分析

前言 order by的作用及含义 order by 用于判断显示位,order by 原有的作用是对字段进行一个排序,在sql注入中用order by 来判断排序,order by 1就是对一个字段进行排序,如果一共四个字段,你order by 5 数据库不知道怎么…

物联网场景中的边缘计算解决方案有哪些?

在物联网场景中,边缘计算是一种重要的解决方案,用于在物联网设备和云端之间进行实时数据处理、分析和决策。HiWoo Box作为工业边缘网关设备,具备边缘计算能力,包括单点公式计算、Python脚本编程以及规则引擎,它为物联网…

使用Kmeans算法完成聚类任务

聚类任务 聚类任务是一种无监督学习任务,其目的是将一组数据点划分成若干个类别或簇,使得同一个簇内的数据点之间的相似度尽可能高,而不同簇之间的相似度尽可能低。聚类算法可以帮助我们发现数据中的内在结构和模式,发现异常点和离…

原生求生记:揭秘UniApp的原生能力限制

文章目录 1. 样式适配问题2. 性能问题3. 原生能力限制4. 插件兼容性问题5. 第三方组件库兼容性问题6. 全局变量污染7. 调试和定位问题8. 版本兼容性问题9. 前端生态限制10. 文档和支持附录:「简历必备」前后端实战项目(推荐:⭐️⭐️⭐️⭐️…

服务网格技术对比:深入比较Istio、Linkerd和Envoy等服务网格解决方案的优缺点

🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~&#x1f33…

解决mysqld服务启动失败

1、进程 首先查看下mysql进程: ps -aux | grep mysql有进程号 2、所有者和所属组为mysql 查看/usr/local/MySQL/data/mysqld.pid所有者和所属组是否为mysql 原来是权限有问题,那么更改权限(还需要加权限)3、 重新启动服务

Kubernetes.Service—使用源 IP

使用源 IP 运行在 Kubernetes 集群中的应用程序通过 Service 抽象发现彼此并相互通信,它们也用 Service 与外部世界通信。 本文解释了发送到不同类型 Service 的数据包的源 IP 会发生什么情况,以及如何根据需要切换此行为。 准备开始 术语表 本文使用…

阿里云盘自动每日签到无需部署无需服务器(仅限学习交流使用)

一、前言 阿里云盘自动每日签到,无需部署,无需服务器 执行思路:使用金山文档的每日定时任务,执行阿里云盘签到接口。 二、效果展示: 三、步骤: 1、进入金山文档网页版 金山文档官网:https:…

EXCEL数据自动web网页查询----高效工作,做个监工

目的 自动将excel将数据填充到web网页,将反馈的数据粘贴到excel表 准备 24KB的鼠标连点器软件(文末附链接)、Excel 宏模块 优势 不需要编程、web验证、爬虫等风险提示。轻量、稳定、安全。 缺点 效率没那么快 演示 宏环境 ht…

QT第四讲

思维导图 基于QT的网络聊天室 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include<QTcpServer> //服务器类 #include<QTcpSocket> //客户端类 #include<QMessageBox> //对话框类 #include<QList…

【Terraform学习】Terraform-AWS部署快速入门(快速入门)

Terraform-AWS部署快速入门 实验步骤 连接到 Terraform 环境 SSH 连接到Terraform 环境(名为MyEC2Instance的实例) 在 Amazon Web Services &#xff08;AWS&#xff09; 上预置 EC2 实例 用于描述 Terraform 中基础结构的文件集称为 Terraform 配置。您将编写一个配置来定义…

R-并行计算

本文介绍在计算机多核上通过parallel包进行并行计算。 并行计算运算步骤&#xff1a; 加载并行计算包&#xff0c;如library(parallel)。创建几个“workers”,通常一个workers一个核&#xff08;core&#xff09;&#xff1b;这些workers什么都不知道&#xff0c;它们的全局环…

【雕爷学编程】MicroPython动手做(10)——零基础学MaixPy之神经网络KPU2

KPU的基础架构 让我们回顾下经典神经网络的基础运算操作&#xff1a; 卷积&#xff08;Convolution&#xff09;:1x1卷积&#xff0c;3x3卷积&#xff0c;5x5及更高的卷积 批归一化&#xff08;Batch Normalization&#xff09; 激活&#xff08;Activate&#xff09; 池化&…

Meta-Transformer 多模态学习的统一框架

Meta-Transformer是一个用于多模态学习的新框架&#xff0c;用来处理和关联来自多种模态的信息&#xff0c;如自然语言、图像、点云、音频、视频、时间序列和表格数据&#xff0c;虽然各种数据之间存在固有的差距&#xff0c;但是Meta-Transformer利用冻结编码器从共享标记空间…

14:00面试,14:06就出来了,问的问题有点变态。。。

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到5月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40%,…

音视频——封装格式原理

视频解码基础 一、封裝格式 ​ 我们播放的视频文件一般都是用一种封装格式封装起来的&#xff0c;封装格式的作用是什么呢&#xff1f;一般视频文件里不光有视频&#xff0c;还有音频&#xff0c;封装格式的作用就是把视频和音频打包起来。 所以我们先要解封装格式&#xff0…