Git的基本命令以及其原理(公司小白学习)

devtools/2025/1/16 17:05:16/

从 Git 配置、代码提交与远端同步三部分展开,重点讲解 Git 命令使用方式及基本原理。 

了解这些并不是为了让我们掌握,会自己写版本控制器,更多的是方便大家查找BUG,解决BUG ,这就和八股文一样,大多数都用不着,但用着了,就会知道他的妙处。      

项目初始化:

代码: git init
其他的一些参数

git初始化之后的一些文件的作用:
 

  1. HEAD

    • 指向当前分支的最新提交(commit)。它是一个符号引用,通常指向 refs/heads/master 或其他当前分支。

  2. config

    • 存储仓库的配置信息,如用户信息、远程仓库地址、合并策略等。这些配置可以是全局的、系统的或仓库特定的。

  3. hooks

    • 包含客户端或服务器端的钩子脚本。这些脚本在特定的 Git 操作(如提交、推送等)之前或之后自动执行。常见的钩子包括:

      • pre-commit:在提交之前运行,用于检查代码风格或测试。

      • post-commit:在提交之后运行,用于通知或其他操作。

      • pre-push:在推送之前运行,用于检查推送的安全性。

      • commit-msg:在提交消息编辑完成后运行,用于验证提交消息的格式。

  4. objects

    • 存储所有的数据对象,包括:

      • blobs:文件内容。

      • trees:目录结构。

      • commits:提交对象,包含指向父提交、树对象和作者信息的指针。

      • tags:标签对象,指向特定的提交。

  5. info

    • 包含一些元数据,如 exclude 文件,用于定义不在 .gitignore 中列出的排除规则。

  6. pack

    • 存储打包的对象,以节省磁盘空间。这些打包文件是一系列压缩的对象,可以通过索引文件快速访问。

  7. refs

    • 存储引用,包括:

      • heads:本地分支的引用。

      • tags:标签的引用。

      • remotes:远程分支的引用(如果存在)。

不同级别的Git配置:

系统--全局--本地 配置依次降低,低级别会覆盖高级别

用户名的配置:

Instead of配置:(修改url)

git 命令配置:

git Remote 配置:

查看 Remote :

代码: git Remote -v

添加 Remote:

代码:

结果

git Remote -v会发现多出

git 的config文件中多出(cat .git/config):

区分HTTP和SSH Remote的区别:

主要是身份验证的协议不同,一个是HTTP验证密码,一个是SSH验证密码:

HTTP:

SSH:

如果你发现ssh配置了,还是连不上,可以切换秘钥的协议,把rsa换成其他的就行

ssh-keygen -t rsa -C "这里换上你的邮箱"

Git add:

假如我们先 touch readme.md添加文件,在tree .git文件会发现创建了,却无法找到,这就是因为创建的文件放在了工作区,你需要git add readme.md才会将这份文件上传到暂存区,tree .git可以查看

然后。如图添加进去后,我们可以通过git cat-file -p 你的文件加密后的名称,查看你文件的信息

Git commit:

我们先git commit -m "readme.md"将文件commit后查看,会发现比原来会多了两个文件:

然后我们查看这些提交的东西都是些什么:

我们可以看到他的类型,作者,上传者等等信息。

Object:

git cat-file -p XXX 查询到的文件类型有:

我们如何把这些文件串联到一起呢?它底层是如何做到的呢?

新建分支:

git checkout -b "test"

创建完成新的分支后,我们在从master和test两个分支查看readme.md,就会发现其实二者查询到的文件是同一个,这时,就要映引出我们的Ref文件了

Ref文件:

创建Tag:

代码:git tag v0.0.1

Annotation Tag:(附属标签)

写发布版本信息等描述信息

代码: git tag -a v0.0.2 -m "这里写你的描述“

多了红框内的两份文件,而且查询也查询的文件不同。

这里有第四种object类型commit,有这个文件指向另外一个文件。

追溯历史版本:

修改历史版本:

修改之后,我们通过git log查看会发现两者的名称已经变了,再tree git查看也可以看到Object文件里多了一个commit文件,意味着就会有两份文件,一个修改前,一个修改后,儿修改前的文件的ref会转移到修改后的全新文件上,没有ref的old文件,就被成为悬空文件。查看悬空文件的代码:

由此,我就可以引出一个新的概念,叫做Git GC,他和我们的Java中的GC回收器,垃圾回收算法这些的相似。都是垃圾回收的效果。

git reflog expire --expire=now -- allgit gc --prune=now

本质上是多加了打包和package-ref这个关联文件

Git是如何多人合作以及远端同步的呢?

git push (是将本地同步到远端的方式)


http://www.ppmy.cn/devtools/151001.html

相关文章

python范围

用户图形界面-工资计算器 from tkinter import *def f():w int(e1.get()) int(e2.get()) - int(e3.get())wage.insert(0,w)root Tk() root.title("工资计算器") Label(root, text"每月基本工资:").pack() e1 Entry(root) e1.pack() Label(…

网络传输层TCP协议

传输层TCP协议 1. TCP协议介绍 TCP(Transmission Control Protocol,传输控制协议)是一个要对数据的传输进行详细控制的传输层协议。 TCP 与 UDP 的不同,在于TCP是有连接、可靠、面向字节流的。具体来说,TCP设置了一大…

数据结构概述+顺序表(C语言)

什么是数据结构? 数据结构是计算机存储,管理数据的方式。数据必须依据某种逻辑联系组织在一起存储在计算机内,数据结构研究的就是这种数据的存储结构和数据的逻辑结构。 数据的逻辑结构的4种分类 逻辑结构 ——数据本身之间的关系&#xff1…

《零基础Go语言算法实战》【题目 4-10】在不使用任何内置散列表库的情况下设计一个 HashMap

《零基础Go语言算法实战》 【题目 4-10】在不使用任何内置散列表库的情况下设计一个 HashMap 请实现一个 HashMap 类,该类的方法如下。 ● HashMap() :使用空映射初始化对象。 ● void Put(int key, int value) :将键值对插入到 HashMap …

密码机服务器在云计算中的应用与挑战

随着云计算技术的迅猛发展和普及,密码机服务器作为一种高效、专业的数据安全解决方案,正在云计算领域中扮演着越来越重要的角色。本文将探讨密码机服务器在云计算中的应用及其面临的挑战。 云计算技术涉及大量的数据传输和存储,数据的安全性和…

JavaSwing游戏开发之Camera原理

package org.timer;import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.util.ArrayList; import java.util.List; import java.util.Random;public class GameCameraWithObjects extends JPanel implements KeyListener {// 游戏世界大小private …

NLP学习

第二周 一、深度学习步骤:1. 选定模型结构2. 模型参数随机初始化3. 构造模型损失函数4. 选择优化算法并设置超参数5. 数据准备与预处理6. 训练模型7. 模型评估8. 测试模型9. 应用模型 损失函数极小值、导向意义 超参数的影响迭代次数epoch批次量大小batch size学习率…

【PCIe 总线及设备入门学习专栏 5.3.3 -- PCIe 掩图 mask 介绍】

文章目录 Overview掩图的主要作用PCIe PHY 掩图使用的典型例子 Overview 本文将介绍 PCIe PHY 中掩图 mask的作用。 在 PCIe PHY(物理层)中,掩图(mask) 是用于控制特定位或信号行为的机制,通过屏蔽掉某些位…