Git的安装 + 基本操作

news2024/11/17 11:36:43

一、Git初识

1. 提出问题

​ 不知道你在工作或学习中,有没有遇到这样的情况:我们在创建并编写各种文档时,为了防止文档丢失,更改失误,失误后能恢复到原来的版本,不得不复制出一个一个的副本,保存了文档的各个版本,比如:

① 报告-V1版本

② 报告-V2版本

③ 报告-V3版本

④ 报告-最终版

每个版本都有不同的内容,最后只有一个版本由我们使用!


每一个版本对应着一个文件,随着版本的增多,文件也随着增多,那你还记得每一个版本修改了哪些内容吗?

显然这是做不到的。文档尚且如此,那我们的写的项目代码同样存在这个问题。

2. 如何解决 – 版本控制器

​ 为了解决这个问题,方便管理这些不同版本的文件,便有了版本控制器

所谓版本控制器,就是可以追溯一个文件的历史,以及它发展过程的系统。通俗来说就是可以记录工程的每一次改动和版本迭代的一个管理系统,同时也方便多人协同合作。

目前最主流的版本控制器是Git,这是大名鼎鼎的林纳斯・托瓦兹开发的,没错,就是那个Linux之父。托瓦兹一直都在致力于开源,伟大无需多言。

OIP-C

Git 可以控制电脑上所有格式的⽂件,例如doc、excel、dwg、dgn、rvt等等。

对于我们开发⼈员来说,Git最重要的就是可以帮助我们管理软件开发项目中的源代码文件!

3. 注意事项

​ 对于所有的版本控制器,Git也不例外,其实只能追踪文件的改动,比如TXT文件,网页,所有的程序代码等等。版本控制器可以告诉你每次的改动,比如在代码的第5行添加了 “hello world”,在第8行删除了单词 “Linux”。

​ 而图片、视频这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是只知道从100KB改成了120KB,但到底该了啥,版本控制器不知道,也没法知道。

二、Git的安装

Git是开放源代码的代码托管工具,最早是在Linux下开发使用的。开始也只能应用于Linux平台,后面慢慢的被移植到Windows下,现在,Git可以在Linux、Unix、Mac和Windows这几大平台上正常运行了。

1. Linux - centos

你在centos下输入Git,看看系统有没有安装git。

$ git
-bash: git: command not found

如果出现这种情况就表示你没有安装Git,你需要使用命令安装一下Git。

sudo yum -y install git

安装好了之后查看Git的版本:

git --version

2. Linux - ubuntu

这里我使用的ubuntu的系统,因为2024年6月30日Centos官方已经宣布停止对centos进行维护了,原因是Red Hat拒绝继续投资。所以各位使用centos 7的,尽快换成ubuntu吧。

以我的ubuntu 22.04版本举例。

image-20240926182251908

这种情况就是不存在Git,我们需要使用命令来安装Git。

sudo apt-get install git -y

然后使用命令 **【git --version】**来查看Git的版本。

image-20240926182547841

看到Git版本后,说明Git是安装好了,接下来就可以使用Git管理文件版本了。

3. Windows

上面我们说的Git使用都是通过命令的方式使用,而Windows中提供了图形化界面的方式 – 小乌龟Git。

B站上的鹏哥说的很好:

参考链接:https://www.bilibili.com/video/BV1hf4y1W7yT?

p=3&vd_source=b57c3f3e8a7507d4af7322c28f05fdbc

三、Git的基本操作

1. 创建Git本地仓库

我们先创建一个目录gitcode出来,名字你随便取,然后进入该目录中。

仓库是版本控制的一个文件目录,所以我们想对文件进行版本控制,我们需要创建一个仓库出现。

而创建一个本地仓库的命令是 【git init】,注意该命令要在文件目录下执行:

image-20240926184055824

我们发现执行了git init后,gitcode目录下多了一个隐藏文件 .git

.git目录是Git来跟踪管理仓库的,不要手动修改这个目录里面的文件,不然改乱了,把Git仓库给破坏了。

使用tree命令可以查看.git文件树的结构。

当你第一次使用 tree 命令的时候,会发现没有安装,同样我们使用命令安装一下:

sudo apt-get install tree

image-20240926184551238

image-20240926190428071


2. 配置Git

安装好了Git后,首先要做的事情就是设置你的 用户名称e-mail地址,这是非常重要的。配置命令为:

git config [--global] user.name "Your Name" 
git config [--global] user.email "email@example.com" 
# 把 Your Name 改成你的昵称
# 把 email@example.com 改成邮箱的格式,只要格式正确即可。

其中 –global 是一个可选项。如果使用了该选项,表明这台机器上的所有Git仓库都会使用这个配置。注意:一个机器上不只存在一个Git仓库,你可以在不同的目录下创建很多仓库。

如果你希望不同的仓库 nameemail,可以不使用 --global选项。

查看配置情况命令:

git config -l

image-20240926191013146


3. 认识工作区、暂存区、版本库

工作区:是在电脑上你要写代码或文件的目录。

暂存区:英文叫stage 或 index。一般存放在 .git 目录下的 index 文件(.git/index)中,我们把暂存区有时也叫作索引(index),上面我们的截图的.git树结构还看不到index,那是我们还没有将工作区的内容add到暂存区中。

版本库:又名仓库,英文名repository。工作区有一个隐藏目录.git,它不算工作区,而是Git的版本库。

这里有一个图展示了它们三个的关系:

image-20240927084727556

• 图中左侧为⼯作区,右侧为版本库。Git的版本库里存了很多东西,其中最重要的就是暂存区,它相当于中转站。

• 在创建 Git 版本库时,Git会为我们自动创建⼀个唯一的master分支,以及指向 master 的⼀个指针叫 HEAD。(分支和HEAD的概念后面再说)

• 当对工作区修改(或新增)的文件执行 git add 命令时,暂存区目录树的文件索引会被更新。

• 当执行提交操作 git commit 时,master 分支会做相应的更新,可以简单理解为暂存区的目录树才会被真正写到版本库中。

由上述描述我们便能得知:通过新建或粘贴进目录的文件,并不能称之为向仓库中新增文件,而只是在工作区新增了文件。必须要通过使用 git addgit commit 命令才能将文件添加到仓库中进行管理!!!


3.1 添加文件

在包含 .git 的目录下新建一个文件 ReadMe文件,我们可以使用 git add 命令将文件添加到暂存区中:

git add:

  • 添加一个文件或多个文件到暂存区:git add [file1] [file2] . . .
  • 添加目录到暂存区:git add [dir]
  • 添加当前目录下所有改动的文件到暂存区:git add .

工作原理

  1. 检测工作目录中的变化git add 会扫描工作目录中的所有文件,检测哪些文件发生了变化(新增、修改或删除)。
  2. 将变化添加到暂存区:对于检测到的变化,git add 会将这些文件的快照(或者是标记)复制到暂存区。此时,暂存区中的内容就代表了下一次提交的候选内容。
  3. 保持工作目录的独立性git add 只影响暂存区,不会改变工作目录中的实际文件。这意味着你可以在添加文件后继续编辑文件,而不会影响暂存区中的内容。

image-20240927092931992

当我们 git add 到暂存区了之后,就可以查看状态,可以看到提醒这个文件需要被提交。


再使用 git commit 命令将暂存区内容提交到版本库中:

①将暂存区中的全部内容都提交到版本库中:

git commit -m "描述信息"

②将暂存区中的指定文件提交版本库中:

git commit [file1] [file2] ... commit -m "描述信息"

-m “描述信息” 绝对不要省略,这是我们自己写的,用来记录你的每一次的提交细节,这样你才能知道你写的这个代码到底是啥意思,这是给我们看的。

image-20240927094412903

可以看到我们commit提交文件到版本库后,会打印出信息,1个文件被改动(就是ReadMe文件),1行内容被插入,就是在ReadMe文件中的“hello linux”。

除了 git add 文件后立马就 git commit 。还可以多次 add 文件,然后一次性commit。

image-20240927095358102

目前我们已经把文件添加到了版本库中,使用命令 git log 可以查看提交历史记录。

image-20240927095554811

这样看着信息挺眼花缭乱的,我们可以加一个参数,让日志信息简洁一点:--pretty=oneline

image-20240927100043639

需要注意的是,每次我们看到这一大串类似 3452506…d4be30 的是每次提交的 commit id (版本号),这是一个sha1(哈希)计算出来很大的数字,是十六进制表示的,每一个提交的文件的这个哈希值都不同,这样就可以区分我们提交的文件。


3.2 查看 .git 文件

image-20240927150651373

经过我们的add和commit文件了之后,.git树形结构中添加了很多东西,完整的图应当如下:

image-20240927152259949

  1. index 就是我们的暂存区,add 后的内容都是添加到这里的。
  2. HEAD 就是我们的默认指向 master 分支的指针:

image-20240927152741101

而默认的master分支,其实就是:

image-20240927153107093

这一串数字就是最近一次提交的commit id:

image-20240927153241669

  1. objects是.git的版本库,里面创建了各种版本库对象及内容:

image-20240927153957268

查找 objects 时要将 commit id 分成2部分,其前2位是文件夹名称,后38位是文件名称。


3.3 commit提交文件后,哈希值的变化

当我们commit提交文件到了版本库了之后,会新增三种类型的哈希值。

  1. 第一个是存放的最近一次提交的信息:包括tree、parent、author、committer以及commit时的描述信息。

image-20240927154543313

其中的parent是上一次提交的信息:

image-20240927154716144

由此可以看出,每一次的新提交commit后都会有上一次提交时的提交信息,所以说,所有的提交都是像是链表串起来的一样,这样我们就可以找到所有的提交信息了。

  1. 第二个是tree信息,存放的是当前所有提交文件的commit id。

第一次提交:

image-20240927155211957

第二次提交:

image-20240927155129862

可以看出,每一次新的提交,都会更改tree存放的文件commit id。

  1. 第三个就是文件的commit id,查看该id就可以看到当前文件中的内容了。

总结⼀下,在本地的 git 仓库中,有几个文件或者目录很特殊:

index: 暂存区, git add 后会更新该内容。

HEAD: 默认指向 master 分支的⼀个指针。

refs/heads/master: 文件里保存当前 master 分支的最新 commit id 。

objects: 包含了创建的各种版本库对象及内容,可以简单理解为放了 git 维护的所有修改。

当前讲解了git的一些安装与简单操作。后续还有修改文件,版本回退,撤销修改等等操作,敬请期待。

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

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

相关文章

中东电商:下一个蓝海,Google Cloud和Google Maps助力企业乘风破浪

随着“一带一路”倡议的深入推进,中东地区已成为全球瞩目的新兴市场。庞大的年轻消费群体、丰富的石油资源以及不断完善的数字基础设施,为中国企业提供了前所未有的发展机遇。中东电商市场,无疑是下一个蓝海! 中东电商市场&#x…

学日语必备神器!这4款翻译APP你用过吗?

小伙伴们,你们有没有在日常生活或工作中遇到过需要翻译日语的场景呢?无论是阅读日本原著、工作文档还是和日本小伙伴交流,一个好的翻译工具绝对能成为你的贴心小助手;今天,我就来跟大家分享几款我个人非常喜欢的日语翻…

开放原子超级链内核XuperCore可搭建区块链

区块链是一种分布式数据库技术,它以块的形式存储数据,并使用密码学方法保证数据的安全性和完整性。 每个块包含一定数量的交易信息,并通过加密链接到前一个块,形成一个不断增长的链条。 这种设计使得数据在网络中无法被篡改,因为任何尝试修改一个块的数据都会破坏整个链的…

鼎阳加油-IOC关键技术问题的解决记

鼎阳SDS6204示波器EPICS IOC的搭建-CSDN博客 这款示波器在labview下工作的很好,以前搭建逐束团3D系统时连续几个月不间断的工作连接从没断过线,并做过速率测试,单通道时10Hz的波形更新速率都可以达到: 鼎阳SDS6204示波器波形读取…

hive分区详细教程

为什么要分区? 为了提高sql的查询效率 比如: select * from orders where create_date20230826; 假如数据量比较大,这个sql就是全表扫描,速度肯定慢。 可以将数据按照天进行分区,一个分区就是一个文件夹,当…

C++之STL—常用算术生成算法

#include <numeric> accumulate(iterator beg, iterator end, value); // 计算容器元素累计总和 // beg 开始迭代器 // end 结束迭代器 // value 起始值 fill (iterator beg, iterator end, value); // 向容器中填充元素 // beg 开始迭代器 // end 结束迭代器 // val…

AI驱动的Java开发框架:Spring AI Alibaba实战部署教程

前言 随着生成式 AI 的快速发展&#xff0c;基于 AI 开发框架构建 AI 应用的诉求迅速增长&#xff0c;涌现出了包括 LangChain、LlamaIndex 等开发框架&#xff0c;但大部分框架只提供了 Python 语言的实现。但这些开发框架对于国内习惯了 Spring 开发范式的 Java 开发者而言&a…

32. Java栈和队列

1. 前言 栈和队列相关的题目是校招中出现频率一般,但是是属于相对基础的题型。我们要关注两类问题,栈和队列的添加和删除操作,以及栈和队列之间的区别和联系。 2. 栈和队列 2.1 数据结构 首先我们给出栈和队列的数据结构定义: (1)栈(Stack):允许在某一端插入元素(…

【PyTorch入门】编程杂谈·1(文件、字典结构、字符串统计、结果保存)

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;PyTorch入门宝典_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前…

搭建基于H.265编码的RTSP推流云服务器

一、前言 网上能够找到的RTSP流地址&#xff0c;均是基于H.264编码的RTSP流地址&#xff0c;无法测试应用是否可以播放H265实时流为此&#xff0c;搭建本地的把H.264转码成H.265的RTSP服务器&#xff0c;不管是通过VLC搭建本地RTSP服务器&#xff0c;还是通过FFmpeg搭建本地RT…

创作一个JavaScript案例,提示工程师请了解一下。

预期 提问1&#xff1a; web开发im的聊天记录展示的实现思路和代码实战。用户数据结构{nickName&#xff0c;uerID&#xff0c;msg,picture}。当nickName"主人"的时候聊天内容底色绿色&#xff0c;主人的聊天记录是靠左显示&#xff0c;其他人靠右显示。数据内容有长…

如何在 Three.js 场景中创建可点击展开的标签

在复杂的可视化场景中&#xff0c;经常需要为 3D 对象添加可交互的标签&#xff0c;以便用户点击时可以查看详细信息。这篇文章将通过一个简单的案例展示&#xff0c;如何在 Three.js 中为对象创建可点击的标签&#xff0c;点击标签可以展开详细信息&#xff0c;再次点击可以关…

JAVA集成工作流实际项目操作参考,springboot,vue,activiti,在线流程绘制,会签,退回,网关,低代码,

前言 activiti工作流引擎项目&#xff0c;企业erp、oa、hr、crm等企事业办公系统轻松落地&#xff0c;一套完整并且实际运用在多套项目中的案例&#xff0c;满足日常业务流程审批需求。 一、项目形式 springbootvueactiviti集成了activiti在线编辑器&#xff0c;流行的前后端…

THREE.JS法线Shader

以普通情况而论 vNormal normal;//...gl_FragColor vec4( vNormal, 1. );vNormal normal;//...gl_FragColor vec4( normalize( vNormal ) * 0.5 0.5, 1. );vNormal normalMatrix * normal;//...gl_FragColor vec4( normalize( vNormal ) * 0.5 0.5, 1. );normalMa…

C语言进阶【6】---结构体【1】(结构体的本质你不想了解吗?)

本章概述 结构体类型的声明结构体变量的创建和初始化结构体成员访问操作符彩蛋时刻&#xff01;&#xff01;&#xff01; 结构体类型的声明 咱们在讲操作符那个章节中&#xff0c;对于结构体类型的声明进行了讲解&#xff0c;咱们先来回忆一下&#xff0c;为后面的讲解作准备…

堆排序,TopK问题|向上调整建堆|向下调整建堆(C)

堆排序 void HeapSort(int* a, int n) {HP hp;HeapInit(&hp);for (int i 0; i < n; i){HeapPush(&hp, a[i]);}int i 0;while (!HeapEmpty(&hp)){a[i] HeapTop(&hp);HeapPop(&hp);}HeapDestroy(&hp); }先初始化一个堆将数组中的数据一个一个顺序…

【Python大语言模型系列】在阿里云ECS服务器上部署dify大模型应用开发平台(完整教程)

这是我的第360篇原创文章。 一、阿里云ECS简介 云服务器( Elastic Compute Service ,简称ECS )是一-种简单高效、处理能力可弹性伸缩的计算服务&#xff0c;帮助您快速构建更稳定、安全的应用,提升运维效率,降低IT成本&#xff0c;使您更专注于核心业务创新。 这个活动需要满…

Vatee万腾平台:企业智能化生态的领航者

在科技日新月异的今天&#xff0c;企业的智能化转型已成为不可逆转的趋势。Vatee万腾平台&#xff0c;凭借其前瞻性的技术视野和不懈的创新精神&#xff0c;正逐步构建起一个以智能化为核心的新型商业生态&#xff0c;成为推动企业智能化升级的核心力量。 Vatee万腾平台深谙技…

软件设计之Maven(1)

软件设计之Maven(1) 路线图推荐&#xff1a; 【Java学习路线-极速版】【Java架构师技术图谱】 尚硅谷新版Maven教程&#xff08;高效入门maven&#xff0c;上手又快又稳&#xff09; 资料可以去尚硅谷官网免费领取 学习内容&#xff1a; Maven简介安装与环境配置Maven工程GA…

【机器学习(九)】分类和回归任务-多层感知机(Multilayer Perceptron,MLP)算法-Sentosa_DSML社区版

文章目录 一、算法概念二、算法原理&#xff08;一&#xff09;感知机&#xff08;二&#xff09;多层感知机1、隐藏层2、激活函数sigma函数tanh函数ReLU函数 3、反向传播算法 三、算法优缺点&#xff08;一&#xff09;优点&#xff08;二&#xff09;缺点 四、MLP分类任务实现…