当前位置: 首页 > news >正文

Git 初识

一.Git的定义

简单来说,Git 是一个分布式版本控制系统

我们来拆解一下这个定义:

  • 版本控制:就像玩 RPG 游戏时的“存档”。写代码、写文档时,你可能会不断地修改。版本控制就是帮你把每一次重要的修改都“存档”下来。你可以随时查看历史记录、知道每次改了什么地方、是谁改的,并且可以随时“读档”,恢复到任何一个之前的版本。

  • 系统:它是一个工具,一套软件。

  • 分布式:这是 Git 最核心的特点。每个参与项目的人电脑里都拥有整个项目的完整历史记录(一个完整的仓库),而不只是最新的文件。这意味着你可以在本地工作(比如提交代码、查看历史),而无需联网。这也意味着每个人的电脑都是一个完整的备份。

一个生动的比喻:
Git 就像一台 “时间机器” 。你可以乘着它回到项目历史上的任何一个时间点,看看当时是什么样子,或者从那个时间点开始一个新的方向,而不会影响主线发展。

如果没有Git?

我们玩游戏只能一条路走到黑,一旦出现问题就真的gameover了。。。

Git的出现正是解决了这个痛点。在Git的版本控制功能下,每一个版本的文件如何更改都会被记录下来,如果出现一些特殊情况,可以及时读档——获取历史版本,这样管理不同版本的文档就安全又高效。

二.Git的工作方式

1.下载并安装Git

要介绍Git的工作方式,我们不妨先把Git安装到当前主机。

首先可以通过该指令查看当前主机有没有下载Git

git --version

结果如下:可以看到我当前的主机是下载并安装了Git的。

wujiahao@VM-12-14-ubuntu:~$ git --version
git version 2.34.1

如果没有显示版本信息,那么可以用该指令下载并安装(这里用ubuntu系统为例)

sudo apt-get install git -y

2.Git基本操作

我们不妨现在当前家目录下创建一个gitcode目录

wujiahao@VM-12-14-ubuntu:~$ pwd
/home/wujiahao
wujiahao@VM-12-14-ubuntu:~$ ls
gitcode

接着我们对这个目录进行初始化,出现下列的提示信息则代表初始化成功。

git init

wujiahao@VM-12-14-ubuntu:~$ ls
gitcode
wujiahao@VM-12-14-ubuntu:~$ cd ./gitcode
wujiahao@VM-12-14-ubuntu:~/gitcode$ git init
hint: Using 'master' as the name for the initial branch. This default branch name
hint: is subject to change. To configure the initial branch name to use in all
hint: of your new repositories, which will suppress this warning, call:
hint: 
hint: 	git config --global init.defaultBranch <name>
hint: 
hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
hint: 'development'. The just-created branch can be renamed via this command:
hint: 
hint: 	git branch -m <name>
Initialized empty Git repository in /home/wujiahao/gitcode/.git/

然后,我们来看一下gitcode初始化之后是什么样的。

tree .git

wujiahao@VM-12-14-ubuntu:~$ cd ./gitcode
wujiahao@VM-12-14-ubuntu:~/gitcode$ tree .git
.git
├── branches
├── config
├── description
├── HEAD
├── hooks
│   ├── applypatch-msg.sample
│   ├── commit-msg.sample
│   ├── fsmonitor-watchman.sample
│   ├── post-update.sample
│   ├── pre-applypatch.sample
│   ├── pre-commit.sample
│   ├── pre-merge-commit.sample
│   ├── prepare-commit-msg.sample
│   ├── pre-push.sample
│   ├── pre-rebase.sample
│   ├── pre-receive.sample
│   ├── push-to-checkout.sample
│   └── update.sample
├── info
│   └── exclude
├── objects
│   ├── info
│   └── pack
└── refs├── heads└── tags9 directories, 17 files

最后来配置一下本地仓库的个人信息:姓名,邮箱。

wujiahao@VM-12-14-ubuntu:~/gitcode$ git config user.name "wjh"
wujiahao@VM-12-14-ubuntu:~/gitcode$ git config user.email "xxx@qq.com"
wujiahao@VM-12-14-ubuntu:~/gitcode$ git config -l
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
user.name=wjh
user.email=xxx@qq.com

根据这个目录结构,我们再来谈谈Git的工作方式。

3.Git的工作方式

Git是版本控制工具,并且可以管理控制任意类型的文件,但只有它们在仓库下才可被进行管理。而.git就是这个追踪管理仓库

问题1:当文件在gitcode中,可以被进行版本控制吗?

回答1:不能,因为它并不在“仓库”中。

问题2:那么把文件mv到.git中,就可以被进行版本控制了吗?

回答2:不能,.git目录不允许任何手动的操作或修改,这可能会导致Git无法正常使用。

那么一个(批)文件究竟该怎样才能被Git进行版本控制呢?请看下图:

1.工作区

Git整个工作的区域可以看作以上图,工作区就是我们上面创建的gitcode(.git虽然在gitcode目录下,但.git并不是工作区,注意区分)。工作区主要用于存放我们将要进行处理的文件。

2.版本库

版本库中有许多内容,但我们主要拿这三个出来说:暂存区stage(也叫index),对象库objects,和master分支。

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

对象库:这里真正存储着版本控制的git对象,修改的工作区内容会写入对象库的一个新的对象,而暂存区实际上存储的是这些修改对象的索引(这也是暂存区被称为index的原因),这也有轻量化的需求。

HEAD:一个指针,对应拿到master的一个分支

3.工作流程(简易版)

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

当工作区的文档发生了修改并执行了git add指令,暂存区的目录树就会发生更新。

当执行提交操作git commit时,才会真正将暂存区的目录树写入master分支中。

因此由上得知,只有我们执行了git add指令和git commit指令后才能将文件添加至代码仓库进行管理,单纯地将文件新建或者粘贴到工作区是无法进行管理的。

 


文章转载自:

http://4ugdk6p5.qrdhz.cn
http://XfmEr9Qi.qrdhz.cn
http://BXDVuYwG.qrdhz.cn
http://TlzuRGa5.qrdhz.cn
http://tdNTtyv8.qrdhz.cn
http://cRvbm044.qrdhz.cn
http://lahcUTwe.qrdhz.cn
http://UuD0ybC3.qrdhz.cn
http://hEmcbKvI.qrdhz.cn
http://GXcyOGXJ.qrdhz.cn
http://biNuljCK.qrdhz.cn
http://NofiglOa.qrdhz.cn
http://suUQ5VHg.qrdhz.cn
http://kdxSo9V0.qrdhz.cn
http://rA0G7xe1.qrdhz.cn
http://J9Nw64ps.qrdhz.cn
http://Ylmu9NIw.qrdhz.cn
http://GL9eBGSx.qrdhz.cn
http://6FzJS525.qrdhz.cn
http://ZfBG8iFS.qrdhz.cn
http://WNurS5IL.qrdhz.cn
http://MZDWTckX.qrdhz.cn
http://fKo5PO9e.qrdhz.cn
http://JDoGmiU3.qrdhz.cn
http://oeFIntG8.qrdhz.cn
http://hyUcXSh7.qrdhz.cn
http://KfPZZ0YZ.qrdhz.cn
http://1KNQUM4V.qrdhz.cn
http://KRSJaEGq.qrdhz.cn
http://gVBXAJY7.qrdhz.cn
http://www.dtcms.com/a/377692.html

相关文章:

  • 安全用电管理系统助力银行以全链路监测
  • 3.远程控制网络编程的设计上
  • 存算一体芯片生态评估:从三星PIM到知存科技WTM2101
  • 智联未来 点赋科技
  • SpringBoot项目健康检查端点返回为down排查思路
  • yolov8(yolov11)目标识别使用Tensorrt推理-2.0(C++Api)
  • 《Java中的IO流》
  • sql语句练习
  • 《深度学习的核心公式》
  • 划痕缺陷检测:3类成因,对应3套打光方案
  • 摆动序列:如何让数组“上下起伏”地最长?
  • 模型 公地悲剧
  • 深入理解 Android targetSdkVersion:从 Google Play 政策到依赖冲突
  • DDNS动态域名解析服务:原理与工具详解全攻略,外网畅访内网设备用自定义固定域名
  • 【系统分析师】第20章-关键技术:信息物理系统分析与设计(核心总结)
  • 批量更新数据:Mybatis update foreach 和 update case when 写法及比较
  • 九、瑞萨发布RZT/N认证的PROFINET-IRT和PROFIdrive软件协议栈
  • Linux系统学习之注意事项及命令基本格式
  • MoE架构训练系统设计:专家并行与门控网络优化策略
  • 深入分析神马 M56S+ 202T 矿机参数与性能特点
  • 工业RFID现场网关模块:实现多协议互通,128台读写设备互连!
  • Linux系统之----信号
  • 硅基计划4.0 算法 归并排序
  • 关于发布未来工业互联网基础理论与关键技术重大研究计划2025年度项目指南的通告
  • RAG技术解析:AI如何“边查边答”,还要守住数据安全底线?
  • 多通道相参信号
  • 数据映射表
  • NVSpeech_170k 数据集音频提取处理
  • GC Root的一些理解
  • Windows 使用 SHFileOperation 实现文件复制功能