git - 笔记

为什么要学习Git

为什么要学习Git软件
为什么学习 因为在主流开发中,基于互联网软件开发的项目都会使用Git软件来进行项目开发过程中的资源管理
比如人力资源
代码资源 比如前端资源 .html .java等代码资源
文档资源 像项目开发中涉及到的需求文档等
这种项目中管理资源的软件被称为(软件配置管理)SCM软件

软件配置管理(SCM)是指通过执行版本控制、变更控制的规程,以及使用合适的配置管理软件,来保证所有配置项的完整性和可跟踪性。配置管理是对工作成果的一种有效保护。
SCM(Software Configuration Management,软件配置管理)是一种标识、组织和控制修改的技术。它应用于整个软件生存周期。作为评价一个大中型软件开发过程是否正确,合理,有效的重要手段,
为什么要学习Git软件
那么多软件,为什么要学Git
常见的SCM软件

左边的软件都需要中央服务器,如果中央服务器损坏,那么项目的资源就会可能丢失,我们的Git就没这种问题
Git软件比Subversion、CVS、Perforce和ClearCase等SCM(Software Configuration Management软件配置管理)工具具有性价比更高的本地分支、方便的暂存区域和多个工作
Git免费开源
Git基础概念
Git是一个免费的,开源的分布式版本控制软件系统,学习Git软件的具体操作前,我们需要对一些基础的概念和名词进行解释

2.版本控制

2.1什么是版本

软件版本

  • 比如JDK1.8 JDK17 JDK20
  • MYSQL5.7 MYSQL8.0
  • IDEA2022 IDEA2023
  • 这些数字都是软件的版本号

文件版本

  • 保存重要的历史记录
  • 能够实现恢复数据的功能

2.2 版本控制的基础功能

  • 保存和管理文件
  • 提供客户端功能进行访问

  • 提供不同版本文件的比对功能

没有进行版本控制或者版本控制本身缺乏正确的流程管理,在软件开发过程中将会引入很多问题,如软件代码的一致性、软件内容的冗余、软件过程的事物性、软件开发过程中的并发性、软件源代码的安全性,以及软件的整合等问题。

3.集中式、分布式版本控制的区别

3.1集中式版本控制

多个用户同时改写了同一个文件,导致文件内容被覆盖,也就是文件冲突问题

       1. VSS解决方法 可以通过给文件加锁,限定用户进行修改来解决

  •         比如用户1拿了一个文件,要进行修改,就给这个文件加锁,其他用户可以下载,但是不能修改,当用户1修改好了这个文件并上传,其他用户重新下载到本地,这时候才能进行修改文件
  •         但是这样存在缺陷,不同的用户只能串行的进行修改文件

       2. CVS SVN的解决方法:一个文件的部分用来以一个用户的修改为准

3.2分布式版本控制

1.Git工作区域

Git软件为了更方便地对文件进行版本控制,根据功能得不同划分了三个区域

  • 存储区域:Git软件用于存储资源得区域。一般指得就是.git文件夹
  • 工作区域:Git软件对外提供资源得区域,此区域可人工对资源进行处理。
  • 暂存区:Git用于比对存储区域和工作区域得区域。Git根据对比得结果,可以对不同状态得文件执行操作。

我们的本地仓库指的就是存储区域,我们commit就是将工作区的修改提交到我们的本地仓库,而我们的暂存区的作用就是对比工作区和存储区域的不同

2.Git分支


如果我们每个用户负责一个模块,直接提交给版本库带来的问题

  • 历史提交记录中没有规律可言,非常乱
  • 这样频繁的修改会导致大量的版本信息,会导致仓库更大
  • 这样频繁的修改会引起大量的文件冲突

如果所有的操作都是基于一条主线完成的。就好比,咱们学习的时候,记学习笔记,今天学点,那么就写一点,明天学点,再写一点,最后,完全学完了,这个笔记也就记全了。但实际上,有些文件可能在不同的场合需要同时使用不同的内容,而且还不能冲突,比如项目的配置文件,我需要本地进行测试,同时还要部署到服务器上进行测试。本地和服务器上的环境是不一样的,所以同一个配置文件就需要根据环境的不同,进行不同的修改。本地环境没问题了,修改配置文件,提交到服务器上进行测试,如果测试有问题,再修改为本地环境,重新测试,没问题了,再修改为服务器配置,然后提交到服务器上进行测试。依次类推,形成迭代式开发测试。

从上面的描述上看,就会显得非常繁琐,而且本质上并没有太重要的内容,仅仅是因为环境上的变化,就需要重新修改,所以如果将本地测试环境和服务器测试环境区分开,分别进行文件版本维护,是不是就会显得更合理一些。这个操作,在Git软件中,我们称之为branch,分支。

这里的分支感觉上就是树上的分叉一样,会按照不同的路线生长下去。有可能以后不再相交,当然,也可能以后会不断地纠缠下去,都是有可能的。

3.引入分支之后

  • 给我们的每个用户都分配一个备份的版本库,每个备份的版本库就是一个分支,我们经理的分支就是main
  • 这里的分支原理,我们只是方便理解,其真正的实现并不是这样,在后面的版本号会详解解析

4.利用GithupDeskTop测试分支

5.主干分支

  • 默认情况下,Git软件就存在分支的概念,而且就是一个分支,称之为master分支,也称之为主干分支。
  • 这就意味着,所有文件的版本管理操作都是在master这一个分支路线上进行完成的。
  • 不过奇怪的是,为什么之前的操作没有体现这个概念呢,那是因为,默认的所有操作本身就都是基于master分支完成的。而master主干分支在创建版本库时,也就是git init时默认就会创建。

6.其他分支

就像之前说的,如果仅仅是一个分支,在某些情况并不能满足实际的需求,那么就需要创建多个不同的分支。(分支导致命名冲突问题,可以进行编辑删除一些,但是会导致内容合并)

7.Git合并

无论我们创建多少个分支,都是因为我们需要在不同的工作环境中进行工作,但是,最后都应该将所有的分支合在一起。形成一个整体。作为项目的最终结果。

4.版本号 

1.什么是版本号

  • 每次提交都会生成一个版本号,这个版本号是一个40位的16进制长度的数字字符串

  • 为什么git软件产生的版本号这么长,git尝试的版本号是根据我们当前提交内容利用SHA-1加密算法得出,所以重复的概率很小(由40个16进制组成的版本号)

  • 为什么需要保证重复的几率很小——Git是分布式版本控制软件系统,所以我们的版本库可能不止一个,而且会涉及到版本库的合并,所以我们的版本号重复会出现问题
  • 根据版本号定位到仓库中的文件 2+38(前两位是文件夹,后38位的文件名)
    • 在存储区中查找,也就是.git/objects

 

 2.文件操作对应的版本号

这里的演示是连续的操作初始化—添加文件—修改文件—

3.初始化仓库对应版本号

git cat-file - 版本号 友好查看文件

100  表示一个普通文件 644表示文件权限 blob表示当前普通文件对象 后面字符串是个版本号

  • 一次初始化创建了两个文件.gitattributesh和README.md文件(可选),且创建了多个版本号,一个版本

 4.添加一个文件对应版本号

  • 我们的添加操作对应的提交信息中有指向上一次操作对应提交信息的文件 也就是对应parent的值
  • 我们的文件状态文件会指向我们的新添加的a.txt。也会指向我们初始化操作添加的文件

 5.修改文件对应的版本号

  • 修改操作对应的版本的提交信息的文件中的parent指向上一次添加a.txt的操作的提交信息文件
  • 对应版本的文件状态文件中会指向修改后的a.txt文件,也会指向我们初始化操作添加的文件

6.删除文件对应的版本信息

  • 删除操作对应的版本的提交信息的文件中的parent指向上一次修改a.txt的操作的提交信息文件
  • 对应删除操作的文件状态信息中只有指向初始化添加的文件,没有a.txt文件了

 7.分支操作对应的原理

根据上面的图进行解释

8.认识两个文件

  • 我们发现main文件下的内容就是我们上述操作中的最后一步操作,删除a.txt文件的提交信息文件的版本号

 

  • HEAD就表示当前我们的分支是哪个,然后通过分支对应的文件指向对应的操作,来知道当前分支的操作最新操作是什么

9. 我们添加一个分支并切换该分支

 

  • 我们发现切换分支,我们的HEAD的文件中的内容就改变了
  • 所以我们Git中就是通过heads文件下文件中内容指向不同版本的提交信息文件来实现分支的功能

 10.命令行操作

Git软件是免费、开源的。最初Git软件是为辅助 Linux 内核开发的一套软件,所以在使用时,简单常用的linux系统操作指令是可以直接使用的

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

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

相关文章

在文件夹下快速创建vue项目搭建vue框架详细步骤

一、首先在你的电脑目录下新建一个文件夹 进入该文件夹并打开控制台(输入cmd指令) 进入控制台后输入 vue create springboot_vue (自己指定名称) 如果出现这类报错如:npm install 的报错npm ERR! network request to http://registry.cnp…

Centos7安装postgresql14步骤

1、进入网址 https://www.postgresql.org/download/ 2、按步骤执行 # Install the repository RPM: sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm# Install PostgreSQL: sudo yum install -y…

蓝桥杯真题讲解:子矩阵(二维滑动窗口)

蓝桥杯真题讲解&#xff1a;子矩阵&#xff08;二维滑动窗口&#xff09; 一、视频讲解二、正解代码 一、视频讲解 蓝桥杯真题讲解&#xff1a;子矩阵&#xff08;二维滑动窗口&#xff09; 二、正解代码 //二维单调队列 #include<bits/stdc.h> #define endl \n #def…

删除数据表

oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 删除数据表属于数据库对象的操作 drop table 表名称; 删除 emp30 表 SQL> drop table emp30;表已删除。 上面这个语句运行后&#xff0c;就会把数据表 emp30 删除 在…

东京工业大学最新!一种具有多周期特征描述的精确ORB提取器

作者&#xff1a;小柠檬 | 来源&#xff1a;3DCV 在公众号「3DCV」后台&#xff0c;回复「原论文」可获取论文pdf 添加微信&#xff1a;dddvision&#xff0c;备注&#xff1a;3D高斯&#xff0c;拉你入群。文末附行业细分群 详细内容请关注3DCV 3D视觉精品课程&#xff1a;…

数据结构 第2章:线性表

文章目录 2.1 线性表的定义和操作2.1.1 线性表的基本概念2.1.2 线性表的基本操作 2.2. 顺序表2.2.1. 顺序表的基本概念2.2.2. 顺序表的实现2.2.3. 顺序表的基本操作 2.3 链表2.3.1 单链表的基本概念2.3.2 单链表的实现2.3.3 单链表的插入2.3.4. 单链表的删除2.3.5. 单链表的查找…

软考69-上午题-【面向对象技术2-UML】-关系

一、关系 UML中有4种关系&#xff1a; 依赖&#xff1b;关联&#xff1b;泛化&#xff1b;实现。 依赖&#xff1a;两个事物之间的语义关系&#xff1b;其中一个事物发生变化会影响另一个事物的语义。 关联&#xff1a;一组对象之间连接的结构关系。 泛化&#xff1a;一般/特…

【libwebrtc】基于m114的构建

libwebrtc A C++ wrapper for binary release, mainly used for flutter-webrtc desktop (windows, linux, embedded).是 基于m114版本的webrtc 最新(20240309 ) 的是m122了。官方给出的构建过程 .gclient 文件 solutions = [{"name" : src,"url

一篇论文回顾 Sora 文生视频技术的背景、技术和应用。

一篇论文回顾 Sora 文生视频技术的背景、技术和应用。 追赶 Sora&#xff0c;成为了很多科技公司当下阶段的新目标。研究者们好奇的是&#xff1a;Sora 是如何被 OpenAI 发掘出来的&#xff1f;未来又有哪些演进和应用方向&#xff1f; Sora 的技术报告披露了一些技术细节&…

docker部署springboot jar包项目

docker部署springboot jar包项目 前提&#xff0c;服务器环境是docker环境&#xff0c;如果服务器没有安装docker&#xff0c;可以先安装docker环境。 各个环境安装docker&#xff1a; Ubuntu上安装Docker&#xff1a; ubuntu离线安装docker: CentOS7离线安装Docker&#xff1…

04-微服务 面试题

目录 1.Spring Cloud 常见的组件有哪些? 2.服务注册和发现是什么意思?(Spring Cloud 如何实现服务注册发现) 3.你们项目负载均衡如何实现的 ? 4.什么是服务雪崩,怎么解决这个问题? 5.你们服务是怎么监控的? 6.微服务限流(漏桶算法、令牌桶算法) 7.解释一下CAP…

【AI绘画】免费GPU Tesla A100 32G算力部署Stable Diffusion

免责声明 在阅读和实践本文提供的内容之前&#xff0c;请注意以下免责声明&#xff1a; 侵权问题: 本文提供的信息仅供学习参考&#xff0c;不用做任何商业用途&#xff0c;如造成侵权&#xff0c;请私信我&#xff0c;我会立即删除&#xff0c;作者不对读者因使用本文所述方法…

【死磕Elasticsearch】从实战中来,到实战中去

文章目录 写在前面&#xff1a;1、索引阻塞的种类2、什么时候使用阻塞&#xff1f;场景1&#xff1a;进行系统维护场景。场景2&#xff1a;保护数据不被随意更改场景。场景3&#xff1a;优化资源使用的场景。场景4&#xff1a;遵守安全规则场景。 3、添加索引阻塞API4、解除设置…

QGIS 开发之旅一《二次开发环境搭建》

1、 安装QT 下载QT Index of /new_archive/qt 我选择的版本是 Qt5.14.2 2、安装VS2017 Downloads & Keys - Visual Studio Subscriptions。下载后选择windows通用平台开发和C 开发就可以了。 3、安装插件QT vs tools 搜索 qt vs tools&#xff0c;选择第一个安装 …

安卓简单登录

注意 有的朋友不知道登录咋写&#xff0c;这里我就简单给出相应代码&#xff0c;用的本地存储&#xff0c;没用网络请求&#xff0c;有需要可以替换成想要的&#xff0c;废话不多上代码 登录 import androidx.appcompat.app.AppCompatActivity;import android.content.Context…

springboot的Converter和HttpMessageConveter

Converter和HttpMessageConveter是springboot和springmvc在处理请求的时候需要用到的。但是这两者的完全是不一样的&#xff0c;作用的地方也不一样。 1&#xff0c;springboot和springmvc处理请求的流程 先来回顾一下处理请求的流程&#xff1a; 用户向服务器发送请求&#…

WebSocket:实现客户端与服务器实时通信的技术

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

嵌入式系统工程师错题总结

笔者来介绍一下嵌入式系统工程师考试的一些易错题目 题目介绍  流水线指令计算公式&#xff1a;一条指令总时间max&#xff08;单个指令执行时间&#xff09;*&#xff08;指令数-1&#xff09;  平均故障间隔时间  ICMP协议&#xff1a;传送通信问题相关的消息。 …

12双体系Java学习之局部变量和作用域

局部变量 局部变量的作用域 参数变量

小白必看,靠这几步写一份简单的产品说明书!

我们都知道&#xff0c;无论是新产品发布&#xff0c;还是老产品的推广&#xff0c;产品说明书都扮演着至关重要的角色。产品说明书可以帮助用户正确、高效地使用产品&#xff0c;也是传递企业发展理念、展示企业形象的有效途径。但作为一个小白&#xff0c;怎样才能写一份简单…