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

news2024/9/30 3:23:08

文章目录

  • 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 提交了

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

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

相关文章

Nexperia和KYOCERA AVX Components Salzburg 就车规氮化镓功率模块达成合作

Nexperia和KYOCERA AVX Components Salzburg 就车规氮化镓功率模块达成合作 基础半导体器件领域的高产能生产专家Nexperia(安世半导体)近日宣布与国际著名的为汽车行业提供先进电子器件的供应商 KYOCERA AVX Components (Salzburg) GmbH 建立合作关系&am…

【弹力设计篇】聊聊隔离设计

为什么需要隔离设计 隔离其实就是Bulkheads,隔板。在生活中隔板的应用主要在船舱中进行设计,目的是为了避免因一处漏水导致整个船都沉下去。可以将故障减少在一定的范围内,而不是整个船体。 从架构演变来说的话,大多数系统都是从…

兵兵数码:网络机顶盒哪个好?2023最新网络机顶盒排名

网络机顶盒让电视机重生,解决卡顿、资源少、广告多等问题,我们每年都会进行网络机顶盒测评,今年已经测评过17款,通过多角度对比筛选了五款表现最佳的产品整理成网络机顶盒排名,近期想买网络机顶盒不知道网络机顶盒哪个…

工具篇-Mysql 性能优化

文章目录 前言一、Mysql 性能问题:1.1 一条sql 的执行流程:1.2 MySQL 可能出现的性能问题: 二、优化:2.1 硬件层面:2.2 软件层面:2.2 .1 mysql 参数配置优化:2.2.1.1 mysql 服务端连接优化&…

【Golang】Golang进阶系列教程--为什么 Go 语言 struct 要使用 tags

文章目录 前言struct tags 的使用使用反引号避免使用空格避免重复使用标准化的 tag 名称多个 tag 值 struct tags 的原理struct tags 的优势常用的 struct tags参考文章: 前言 在 Go 语言中,struct 是一种常见的数据类型,它可以用来表示复杂…

【MMdetection3d】Step1:环境搭建

Step1:环境搭建 1.创建并激活虚拟环境1.1 用官方Pytorch指令安装!1.2 用官方mmcv指令安装! 2 安装MMDetection3 克隆编译mmdetection3d4 环境测试5 测试demo 在Conda虚拟环境中搭建MMdetection3d环境 1.创建并激活虚拟环境 conda create -n mm3d python…

JavaEE简单示例——在使用Tomcat的时候可能出现的一些报错

简单介绍: 在我们之前使用Tomcat的时候,经常会出现在启动的时候因为一些报错导致项目无法正常的启动,我们就对一些比较常见的报错来看一下可能导致的原因,以及出现报错之后如何去解决。 严重: Failed to initialize end point a…

Spring中最简单的过滤器和监听器

1. 过滤器概念引入 Filter也称之为过滤器,它是Servlet技术中最实用的技术,Web开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功…

一文看完智能视频监控系统的工作原理及场景应用

智能视频监控系统的原理是利用摄像机采集视频信号,并通过相关的AI模型算法实时分析视频内容,提取出有用信息,如人脸、车牌号码、移动物体等,并进行识别及特征提取,最终形成监控报警、实时监控、历史录像回放等应用。 智…

【JAVA】 String 类简述笔记

个人主页:【😊个人主页】 系列专栏:【❤️初识JAVA】 文章目录 前言String类创建一个String类 常用方法字符串长度 length() 方法连接字符串 concat() 方法创建格式化字符串 format()功能 前言 string是C、java、VB等编程语言中的字符串&…

项目报错clone2.weekday is not a fuction

ant-design-vue中的dayjs版本和我项目中的dayjs版本不一样 项目中的dayjs版本号 ant-design-vue中的dayjs版本号"dayjs": “^1.11.9” 解决方法: 将项目中的版本号更新"dayjs": “^1.11.9” yarn add dayjs^1.11.9

lc162.寻找峰值

由于题目假设nums[-1]和nums[n]等于负无穷 如果nums[i]>nums[i1]&#xff0c;即nums[-1]<nums[i]>nums[i1]&#xff0c;那么在[0,i]区间内一定存在峰值 如果nums[i]<nums[i1]&#xff0c;即nums[i]<nums[i1]>nums[n]&#xff0c;那么在[i1,n-1]区间内一定存…

dubbo原理框架设计

dubbo原理框架设计 &#xff08;1&#xff09;config 配置层&#xff1a;对外配置接口&#xff0c;以 ServiceConfig, ReferenceConfig 为中心&#xff0c;可以直接初始化配置类&#xff0c;也可以通过 spring 解析配置生成配置类。 &#xff08;2&#xff09;proxy 服务代理…

如何使用postman判断返回结果是否正确

针对一个接口&#xff0c;我们在知道参数以及参数对应的结果时&#xff0c;可以通过postman进行判断&#xff0c;验证返回数据是否与预期数据相等。这样可以使我们的接口测试更加的方便简洁。 1、准备数据。 postman可以接受的文件格式如图所示&#xff0c;一般来说可以将我们…

mysql(五)主从配置

目录 前言 一、MySQL Replication概述 二、MySQL复制类型 三、部署MySQL主从异步复制 总结 前言 为了实现MySQL的读写分离&#xff0c;可以使用MySQL官方提供的工具和技术&#xff0c;如MySQL Replication&#xff08;复制&#xff09;、MySQL Group Replication&#xff08;组…

【读点论文】PP-YOLOE: An evolved version of YOLO,面向友好部署的模型设计,为项目后续产业落地提供了更加有效的参考

PP-YOLOE: An evolved version of YOLO Abstract 在本报告中&#xff0c;我们介绍了PP-YOLOE&#xff0c;一种具有高性能和友好部署的工业最先进的目标探测器。我们在之前的PP-YOLOv2的基础上进行优化&#xff0c;采用无锚模式&#xff0c;更强大的骨干和颈部配备CSPRepResSt…

【C语言数据结构】模拟·顺序表·总项目实现

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …

文件系统总结

《本文件系统默认linux文件系统》 一、文件系统基本概念 文件系统是操作系统中负责存取和管理信息的模块&#xff0c;它用统一的方式管理用户和系统信息的存储、检索、更新、共享和保护&#xff0c;并为用户提供一整套方便有效的文件使用和操作方法文件系统是操作系统中管理文…

【Quartus FPGA】EMIF DDR3 读写带宽测试

在通信原理中&#xff0c;通信系统的有效性用带宽来衡量&#xff0c;带宽定义为每秒传输的比特数&#xff0c;单位 b/s&#xff0c;或 bps。在 DDR3 接口的产品设计中&#xff0c;DDR3 读/写带宽是设计者必须考虑的指标。本文主要介绍了 Quartus FPGA 平台 EMIF 参数配置&#…

JAVA基础多线程-模拟线程死锁以及预防和避免死锁

引言 线程死锁描述的是这样一种情况&#xff1a;多个线程同时被阻塞&#xff0c;它们中的一个或者全部都在等待某个资源被释放。由于线程被无限期地阻塞&#xff0c;因此程序不可能正常终止。 一&#xff0c;模拟死锁 示例代码&#xff1a; public class LockT1 {Object o …