【Git原理与使用】-- 初步认识

目录

Git·版本控制器的引入

版本控制器 

Git安装(已安装可以跳过)

Linux-centos

Linux-ubuntu

Git基本操作

创建Git本地仓库

配置 Git

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

工作区、版本库

stage暂存区

工作区内容使用Git管理


Git·版本控制器的引入

#:引入问题
        在学习或工作中,时常需要编写各种文档时,而导师或老板的要求时常会导致多次的修改 (多版本的修订) ,然而导师或老板最终需要的却是前面的版本, 于是:为了防止文档丢失或能恢复到原来的版本,不得不复制出一个副本
  • 报告 - 初步版
  • 报告 - 修订一版
  • 报告 - 修订二版
  • ……
  • 报告 - 确定版
        以此对多个版本进行管理,便于 "版本的回退" 。这个方法是可以的,但是也是有问题的,当版本到达一定数量的时候,如果要求的是回到 "添加了什么什么功能的修订版" 的时候,是很困难的。
缺陷:
  1. 随着版本的不断增多,维护好版本是很有挑战的。
  2. 无法得知版本修改的内容是什么。

版本控制器 

        于是为了我们能够更方便管理这些不同版本的文件,便有了大佬们设计的 "版本控制器"  
        所谓的版本控制器:就是能让我们了解到一个文件的历史,以及它的发展过程的系统。通俗的讲就是 一个可以记录工程的每一次改动和版本迭代的⼀个管理系统 ,同时也方便多人协同作业。
        目前最主流的版本控制器就是 Git 。 Git 可以控制电脑上所有格式的文件 ,例如 doc、excel、dwg、dgn、rvt等等。对于我们开发人员来说,Git 最重要的就是可以帮助我们管理软件开发项⽬中的源代码文件。

#注意:

        还需要再明确⼀点,所有的版本控制系统,Git 也不例外,其实 只能跟踪文本文件的改动 ,比如 TXT 文件、网页,所有的程序代码等等。版本控制系统可以告诉你每次的改动,比如:在第5行加了⼀个单词 "Linux" ,在第8行删了⼀个单词 "Windows"
        而图片、视频这些⼆进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化,只能把⼆进制文件每次改动串起来,也就是只知道图⽚从100KB改成了120KB,但到底改了啥,版本控制系统不知道,也没法知道。

Git安装(已安装可以跳过)

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

Linux-centos

$ git --version

        作用查看当前设备安装的 git 版本,也可以用于查看当前设备是否已安装git。

        上图,为未安装git。

$ sudo yum install git -y

        利用yum安装git。

        安装成功便可以查到。

Linux-ubuntu

$ git --version

        作用查看当前设备安装的 git 版本,也可以用于查看当前设备是否已安装git。 

        上图,为未安装git。

$ sudo apt-get install git -y

        安装git。

Git基本操作

创建Git本地仓库

        仓库是进行版本控制的⼀个文件目录。我们要想对文件进行版本控制,就必须先创建
⼀个仓库出来。 创建⼀个 Git 本地仓库对应的命令为 git init 注意:命令要在文件目录下执行

        可以发现其在该目录下创建了一个隐藏目录:  .git 

        可以使用 tree 查看该目录下的文件:

[qcr@ecs-205826 project]$ tree .git
.git
├── branches
├── config
├── description
├── HEAD
├── hooks
│?? ├── applypatch-msg.sample
│?? ├── commit-msg.sample
│?? ├── post-update.sample
│?? ├── pre-applypatch.sample
│?? ├── pre-commit.sample
│?? ├── prepare-commit-msg.sample
│?? ├── pre-push.sample
│?? ├── pre-rebase.sample
│?? └── update.sample
├── info
│?? └── exclude
├── objects
│?? ├── info
│?? └── pack
└── refs
    ├── heads
    └── tags

9 directories, 13 files
        对于内部的内容,此文不讲解,只需要知道,.git隐藏目录是用来追踪、管理我们对应的仓库的,千万不要手动的去修改里面的任何内容,一旦改乱了,是会直接把这个git厂库给破坏掉的。

配置 Git

        当安装 Git 后首先要做的事情是设置我们的 用户名称 e-mail 地址,这是非常重要的。如果不配置这两个配置项,将来我们在对本地厂库进行操作的时候,就可能会出现一系列的问题。

         git config 命令,为git厂库设置一些配置项。

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

# 把 Your Name 改成自己对应的昵称
# 把 email@example.com 改成邮箱的格式,只要格式正确即可
         其中 --global 是一个可选项。如果使用了该选项,表示这台机器上所有的 Git 仓库都会使用这个配置。如果希望在不同仓库中使用不同的 name e-mail ,可以不要 --global 选项,但要
注意的是,执行命令时必须要在仓库⾥。
查看配置命令为:
$ git config -l

删除配置命令为:

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

        其中 --unset ,表示重置某一个配置。执行后便可以发现没有了 user.name user.email

Note:使用--global 新增的配置,不能直接使 --unset 进行重置,需要加上--global 才能重置。

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

工作区、版本库

#问:直接在我们之前所创建的目录下创建一个文件 Git 能否进行管理?

 

        是不能的!该文件所在的目录(project)并不是本地仓库,真正的本地厂库是隐藏的 .git 。而仓库又可以称作为版本库

        但是,又是不允许在.git 中手动的进行任何的修改,所以只能将文件写在 project 目录之下。Git 并将该目录称作为 git 的工作区

  • 工作区:是在电脑上我们要写代码或文件的目录
  • 版本库:又名仓库,英文名 repository,工作区有一个隐藏目录 .git ,它不算工作区,而是 Git 的版本库。这个版本库里面的所有文件都可以被 Git 管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以 "还原" 

  • 图中左侧为工作区右侧为版本库
  • 在创建 Git 版本库时,Git 会为我们自动创建⼀个唯⼀的 master 分支,以及指向 master 的⼀个指针叫 HEAD

Note:.git 虽然在写代码或文件的目录下,但是其是不属于工作区的

stage暂存区

  • 暂存区:英文叫 stage 或 index。⼀般存放在 .git 目录下的 index ⽂件(.git/index)中,我们把暂存区有时也叫作索引(index)。

工作区内容使用Git管理

  • 当对工作区修改(或新增)的文件执行 git add 命令。其会将工作区中所有的修改内容,添加进版本库的暂存区中。
  • 当执行提交操作 git commit 时,master 分支会做相应的更新,可以简单理解为暂存区的目录树才会被真正写到版本库中。

#:Git可以对文件进行版本控制 - 体现

        在版本库中其实还有一个模块:对象库(objects)

        里面存储了一堆的 git对象 ,这些git对象是当我们在进行 git add 新增工作区修改的时候,会将具体的修改内容,都会存到一个新的git对象中,并将这个新的git对象维护到git的对象库里面。以此所有的工作区的内容修改都会被存储到一个git对象中,以此维护管理文件的所有的版本。

#:暂存区

        可以发现暂存区中是一个树状结构,其里面存的不是一个一个的对象,它存的是一个个修改内容的git对象的索引,所以暂存区是轻量级的。

        所以git commit ,是将暂存区中的树写到master分支下,所以master分支下和暂存区一样存的不是对象,而是一个个的索引。所以现在我们只要能拿到对应的HEAD(指针),就能拿到master这颗索引树,然后就能根据索引拿到某一个文件的具体修改的内容,拿到对应的具体的修改内容,就可以管控一个文件了。

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

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

相关文章

今年十八,期末速刷(操作系统篇1)

马上期末了,想问问各位期末考几科 我家学校网安考7科呜呜呜 只能出点文章一把梭了。。。 争取只挂一科 先来先算法(FCFS) 算法思想 我今天学FCFS只有一个要求 公平、公平 还是tnd公平 算法规则 按照进程的先后顺序来进行服务。 是否…

获得忠实铁粉?你也可以

获得忠实铁粉?你也可以 何为铁粉铁粉与普通粉丝区别铁粉规则如何获得铁粉 何为铁粉 在CSDN中,铁粉通常指对某个知名开发者、博主或组织非常支持、崇拜、追随的粉丝。他们可能会关注该开发者或博主的所有文章、博客、视频等,积极参与讨论并分…

C++ 设计模式----“单一职责“模式

二、“单一职责”模式 在软件组件的设计中,如果责任划分的不清晰,使用继承得到的结果往往是随着需求的变化,子类急剧膨胀,同时充斥着重复代码,这时候的关键是划清责任。  典型模式 • Decorator • Bridge 【1】D…

基于Jeecg-boot的flowable流程支持拒绝同意流程操作

更多功能看演示系统 gitee源代码地址 后端代码: https://gitee.com/nbacheng/nbcio-boot 前端代码:https://gitee.com/nbacheng/nbcio-vue.git 在线演示(包括H5) : http://122.227.135.243:9888 因为看很多朋友需要…

easyui01(基本布局)

一.概述 1.What? jQuery EasyUI是一组基于jQuery的UI插件集合体,能帮助web开发者更轻松的打造出功能丰富并且美观的UI界面 2.Why? ①.使用easyui 不需要写很多代码,只需要编写一些简单 HTML 标记,就可以定义用户界…

使用docker部署ELK实战

目录 什么是ELKELK简介ElasticsearchLogstashKibana docker安装ELK安装es安装 Kibana安装logstash 什么是ELK ELK是一个开源的数据分析平台,由三个开源项目Elasticsearch、Logstash和Kibana组成,因此被称为ELK Stack。ELK Stack主要用于处理和分析大量的…

pytorch实现图像分类器

pytorch实现图像分类器 一、定义LeNet网络模型1,卷积 Conv2d2,池化 MaxPool2d3,Tensor的展平:view()4,全连接 Linear5,代码:定义 LeNet 网络模型 二、训练并保存网络参数1,数据预处理…

Exception in thread “main“ java.lang.UnsupportedClassVersionError 50报错处理

之间正常走jenkinsdocker自动化部署的项目,今天改了一个文件,点了一下,竟然没有部署上去,提示如上,如下 Exception in thread "main" java.lang.UnsupportedClassVersionError: com/coocaa/tsp/sys/user/Use…

采用UWB定位技术开发的室内定位系统源码

UWB精准定位系统源码 UWB是什么? UWB(Ultra Wideband)超宽带技术是一种全新的、与传统通信技术有极大差异的通信新技术。它不需要使用传统通信体制中的载波,而是通过发送和接收具有纳秒或纳秒级以下的极窄脉冲来传输数据,实现精准定位。 技术…

机器鸟实现摆动尾巴功能

1. 功能说明 本文示例将实现R329样机机器鸟摆动尾巴的功能。 2. 电子硬件 在这个示例中,我们采用了以下硬件,请大家参考: 主控板 Basra主控板(兼容Arduino Uno)‍ 扩展板 Bigfish2.1扩展板‍ 电池7.4V锂电池 电路连接…

【头歌-Python】9.1 X射线衍射曲线绘制(project)第1~2关

第1关:X 射线衍射曲线 任务描述 本关任务:读文件中的数据绘制线图形。 相关知识 为了完成本关任务,你需要掌握: 1.python 读取文件 2.使用 matplotlib 绘制图形 python 读取文件 python读取文件可以用以下函数实现&#xff1…

chatgpt赋能python:Python收费介绍

Python收费介绍 什么是Python? Python是一种高级的、解释性、面向对象、纯粹的动态语言,多用于快速应用程序开发、脚本编写、系统管理任务等。它有一个简单直观优美的语法,非常容易学习。 Python的收费形式 Python语言本身是免费的,任何…

如何使用Jmeter进行http接口测试?

目录 前言: 一、开发接口测试案例的整体方案: 二、接口自动化适用场景: 三、接口测试环境准备 四、创建工程: 总结: 前言: 本文主要针对http接口进行测试,使用Jmeter工具实现。 Jmter工具设…

1.2 Scala变量与数据类型

一、变量声明 (一)、利用val声明变量 案例演示 (二)利用var声明变量 案例演示 (三)换行输入语句(续行) (四)同时声明多个变量 Scala还可以将多个变量放在一起…

射频电路layout总结

射频电路板设计由于在理论上还有很多不确定性,因此常被形容为一种“黑色艺术”,但这个观点只有部分正确,RF电路板设计也有许多可以遵循的准则和不应该被忽视的法则。在实际设计时,真正实用的技巧是当这些准则和法则因各种设计约束…

RTU遥测终端机的应用场景有哪些?

遥测终端机又称智能RTU遥测终端机,是一种用于采集、传输和处理遥测数据的设备。在现代科技的发展中,遥测终端机扮演着重要的角色。它是一种能够实现远程监测和控制的关键设备,广泛应用于各个领域,包括水文水利、环境监测、工业自动…

创新案例|专注在线 协作平台 设计产品中国首家PLG独角兽企业蓝湖如何实现98%的头部企业渗透率

蓝湖起步于2015年,是一款服务于产品经理、设计师、工程师的产品设计研发在线协作工具, 2021年10月,蓝湖宣布完成C轮融资,融资额高达10亿人民币,称为中国2B市场中首家采用PLG发展的独角兽企业,并实现了从100…

Web 自动化测试Selenium 之PO 模型

目录 1. po 模型介绍 2. PageObject 设计模式 3. PO 的核心要素 4. 非PO 实现 5. PO 实现 6. 总结 7. PO 模式的特点 总结: 1. po 模型介绍 在自动化中,Selenium 自动化测试中有一个名字经常被提及 PageObject (思想与面向对象的特征相同)&#x…

MySQL数据库高级操作

目录 MySQL中6种常见的约束克隆表清空表的数据记录临时表创建外键约束,保证数据的完整性和一致性。 MySQL中6种常见的约束 主键约束(primary key)外键约束(foreign key)非空约束(not null)唯一…

安卓端Google隐私沙盒归因报告聚焦

自2022年2月Google首次提出将推出隐私沙盒至今已一年有余。现在,安卓端的隐私沙盒Beta测试已针对特定Android13设备正式开始。作为早期测试者,Adjust很高兴与 Google一同迈出增强用户隐私的第一步,并在接下来的旅程中继续携手同行。为帮助移动…