git init 执行后发生了什么?

首先在磁盘中创建一个新目录 Git,进入该目录后执行 git init 初始化。这个时候目录下会创建一个隐藏目录 ./git,这个./git 目录叫做 Git 版本库或者仓库

$ git init
Initialized empty Git repository in D:/Git/.git/

image.png


在讲解.git 目录内容前,先来说说 git 中相关的概念:

一、Git 中的基本概念

  1. 仓库(Repository):Git使用仓库来存储项目的版本历史和文件。一个仓库可以包含完整的项目历史记录,包括所有的分支、标签和提交。
  2. 提交(Commit):提交是Git中的基本操作单元,它代表了项目中的一个版本快照。每个提交都包含一个唯一的哈希值,用于标识和引用该提交。
  3. 分支(Branch):分支是用于在项目中进行并行开发的重要概念。每个分支代表一个独立的代码线,可以在其上进行修改和提交。默认情况下,Git创建一个名为"master"的主分支。
  4. 标签(Tag):标签是用于标记项目中的重要点或里程碑的静态指针。与分支不同,标签通常用于标记稳定版本或发布版本,不会随着新的提交而移动。
  5. 远程仓库(Remote Repository):远程仓库是位于网络上的另一个Git仓库副本,用于协作和共享代码。常见的远程仓库托管服务包括GitHub、GitLab和Bitbucket。
  6. 克隆(Clone):克隆是从一个远程仓库创建一个本地副本的操作。克隆操作将复制远程仓库的所有历史记录和文件到本地,使得你可以在本地进行开发和提交。
  7. 拉取(Pull):拉取是从远程仓库获取最新更改的操作。它会将远程仓库的提交合并到本地仓库中,以确保你的本地副本是最新的。
  8. 推送(Push):推送是将本地仓库的提交上传到远程仓库的操作。它将本地的提交推送到远程仓库,以便与其他人共享和访问。
  9. 工作区(Working Directory):工作区是你当前正在编辑和修改文件的目录。它包含了项目的实际文件,包括源代码、配置文件等。就是指在当前根目录下,除了.git 目录下的其他文件。比如在工作区中创建一个 readme.txt 文件:

    $ echo "read me" > readme.txt

    image.png

  10. 暂存区(Staging Area):暂存区是一个中间区域,用于存储将被包含在下一次提交中的更改。可以使用 git add 命令将修改的文件添加到暂存区。

接下来再回过头来看看初始化后的.git 目录:

二 、.git 目录

当执行命令 git init 后,创建的.git 目录结构为:

|   config               //存储仓库的配置信息
|   description                     //该git库的描述信息
|   HEAD                 //指向当前所在的分支。
|
+---hooks                //包含客户端或服务器端的钩子脚本,可以在特定事件发生时触发自定义操作。
|       applypatch-msg.sample
|       commit-msg.sample
|       fsmonitor-watchman.sample
|       post-update.sample
|       pre-applypatch.sample
|       pre-commit.sample
|       pre-merge-commit.sample
|       pre-push.sample
|       pre-rebase.sample
|       pre-receive.sample
|       prepare-commit-msg.sample
|       push-to-checkout.sample
|       sendemail-validate.sample
|       update.sample
|
+---info                //包含全局的Git配置文件
|       exclude
|
+---objects             //存储Git的对象,包括提交、树和文件的内容。
|   +---info            //Git对象内容
|   \---pack            //Git大对象压缩内容放在此处
\---refs                //存储分支和标签的引用。
    +---heads                        //branch分支对应的commit引用
    \---tags            //tag标签对应的commit引用

config 文件

config 文件是.git 目录下一个重要的配置文件,它存储存储着Git仓库的各种配置选项。主要有三个地方存储:

  1. /etc/gitconfig 文件: 系统上所有用户及他们仓库的通用配置。 如果在执行 git config 时带上 --system 选项,那么就会读写该文件中的配置变量。 (由于它是系统配置文件,因此你需要管理员或超级用户权限来修改它。)
  2. ~/.gitconfig 或 ~/.config/git/config 文件:只针对当前用户。在执行 git config 时带上 --global 选项,就让 Git 读写此文件,此时会对当前用户系统上所有的仓库生效。
  3. 当前使用仓库的 Git 目录中的 config 文件(即 .git/config):针对该仓库。 可以在执行 git config 时带上 --local 选项让 Git 强制读写此文件,虽然默认情况下用的就是它。 (当然,你需要进入某个 Git 仓库中才能让该选项生效。)
    每一个级别会覆盖上一级别的配置,所以 .git/config 的配置变量会覆盖 /etc/gitconfig 中的配置变量。
配置用户信息,比如用户名,邮件

能用 git config 命令配置用户信息

//查看所有的配置项
$ git config --list
//配置用户名和邮件, --global 选项会对当前系统所有的仓库生效
$ git config --global user.name "Your Name"
$ git config --global user.email "Your email"
//删除配置项
$ git config --global user.name
$ git config --global user.email
设置 Git 别名

比如利用 git co代替 git commit命令

$ git config --global alias.co commit
配置文本编辑器

当需要输入信息时,比如 git commit时的 message,如果不配置,会使用默认的编辑器,bash 界面中就是 vim。

//windows环境下,编辑时默认打开记事本
$ git config --global core.editor notepad
Index 文件

暂存区(staging Area)实际上就是.git 目录下的 Index 文件,当执行 git add命令时,就会在.git 目录下创建 Index 文件,所 add 的文件对象 ID 会被记录在 Index 文件中的索引中:

$ git add readme.txt

image.png

Objects 目录

当执行命令 git init初始化仓库时,会在.git 目录下创建 objects 目录和子目录 pack 和 info。
在执行 git add操作后,会将文件内容保存在.git/objects 目录下:

├─d9
│      b401251bb36c51ca5c56c2ffc8a24a78ff20ae
│
├─info
└─pack

个文件对应一条内容, 以该内容加上特定头部信息一起的 SHA-1 校验和为文件命名。 校验和的前两个字符用于命名子目录(比如上面的 d9),余下的 38 个字符则用作文件名。查看该文件内容:

//输入SHA-1值的一部分即可查到该文件对应的内容
$ git cat-file -p d9b401251bb
read me
refs 目录和 HEAD 文件

初始化时,该 refs 目录下的子目录 heads 和 tags 均为空。当执行 git commit命令后,heads 子目录会创建一个 master 文件,这个文件指向最新提交的引用:

$ git commit readme.txt
//查看当前的master文件内容:
$ cat .git/refs/heads/master
3894d195cda57b707f71a50bc2f97e06f73eae02
hooks 目录

钩子都被存储在 Git 目录下的 hooks 子目录中。 也就是项目中的 .git/hooks 目录 。 当执行 git init 初始化一个新版本库时,Git 默认会在这个目录中放置一些示例脚本。比如:

+---hooks                //包含客户端或服务器端的钩子脚本,可以在特定事件发生时触发自定义操作。
|       applypatch-msg.sample
|       commit-msg.sample
|       fsmonitor-watchman.sample
|       post-update.sample
|       pre-applypatch.sample
|       pre-commit.sample
|       pre-merge-commit.sample
|       pre-push.sample
|       pre-rebase.sample
|       pre-receive.sample
|       prepare-commit-msg.sample
|       push-to-checkout.sample
|       sendemail-validate.sample
|       update.sample

在特定的重要动作发生时触发这些脚本,主要有两种类型钩子:客户端钩子和服务器端钩子:客户端钩子由诸如提交和合并这样的操作所调用,而服务器端钩子作用于诸如接收被推送的提交这样的联网操作。上述的示例脚本就是客户端钩子脚本。

技术前沿拓展

前端开发,你的认知不能仅局限于技术内,需要发散思维了解技术圈的前沿知识。细心的人会发现,开发内部工具的过程中,大量的页面、场景、组件等在不断重复,这种重复造轮子的工作,浪费工程师的大量时间。

介绍一款程序员都应该知道的软件JNPF快速开发平台,很多人都尝试用过它,它是功能的集大成者,任何信息化系统都可以基于它开发出来。

这是一个基于 Java Boot/.Net Core 构建的简单、跨平台快速开发框架。前后端封装了上千个常用类,方便扩展;集成了代码生成器,支持前后端业务代码生成,实现快速开发,提升工作效率;框架集成了表单、报表、图表、大屏等各种常用的 Demo 方便直接使用;后端框架支持 Vue2、Vue3。如果你有闲暇时间,可以做个知识拓展。

看完本文如果觉得有用,记得点个赞支持,收藏起来说不定哪天就用上啦~

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

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

相关文章

【C++】关联式容器

目录 前言: 一,set容器 二,multiset容器 三,map容器 四,multimap容器 前言: 在C中,STL中的部分容器,比如:vector、list、deque、 forward_list(C11)等,这…

第五届国际信息技术与教育技术大会(ITET 2024)即将召开!

2024年第五届国际信息技术与教育技术大会(ITET 2024)将于5月10-12日在日本鸟取举行。本届会议由日本鸟取大学主办,冈山大学、湘南工业大学、名古屋工业大学、山口大学等提供技术支持。ITET 2024旨在探讨计算机领域的创新发展在教育环境中所带…

javase day03笔记

第三天课堂笔记 idea的使用★★★ 创建空工程创建模块创建包:package创建类idea的设置 file -> settings 快捷键 shift + 回车 : 光标切换到下一行psvm回车: main方法main回车:main方法sout回车:输…

快速入门:JS对象/BOM/DOM/事件监听

本贴介绍JS相对进阶的知识,对于JavaScript的基础语法,本文不再赘述~ 一.JavaScript对象 1.Array数组对象 定义 var arr new Array(1,2,3); var arr[1,2,3]; 访问 arr[0]1; Js数组类似Java中的集合,长度,类型都可以改变。 如…

Web端功能测试方法最有作用的5个点

对于web测试,较之其他软件测试又有所不同,这是细节的不同,这个不同需要我们在不停的测试中去总结的。 web测试正式测试之前,应先确定如何开展测试,不可盲目的测试,讲究方法才能行之有效的提高我们的效…

Linux——文件缓冲区与模拟实现stdio.h

前言 我们学习了系统层面上的文件操作,也明白了重定向的基本原理,在重定向中,我们使用fflush(stdout)刷新了缓冲区,当时我们仅仅知道重定向需要刷新缓冲区,但是不知道其所以然,今天我们来见识一下。 一、…

框架学了不会用?四小时做完一个完整的前后端分离demo(SpringBoot+Vue)

四小时做完一个完整的前后端分离demo(SpringBootVue) 分享一个看到的还不错的小项目,非常适合刚学完框架但是没有太多动手机会的的学生党用来练手。 优势 手把手写代码,有教学视频免费,有源代码项目周期短 视频教程…

Nvidia显卡@参数规格@驱动下载@cuda版本查看

文章目录 Nvidia显卡产品类型GeForce系列 命名规则前缀和后缀技术特点性能指标/👺显存(VRAM)显存和位宽位宽和现存容量的设计 其他 显卡信息查看Nvidia官网查看其他数据库核心规格GeForce系列产品参数在线查看👺大汇显卡规格总比较其他显卡规格比较 性能…

Facebook、亚马逊账号如何养号?

之前我们讨论过很多关于代理器的问题。它们的工作原理是什么?在不同的软件中要使用那些代理服务器?这些代理服务器之间的区别是什么?什么是反检测浏览器等等。 除了这些问题,相信很多人也会关心在使用不同平台的时代理器的选择问题。比如,为什么最好…

目标检测——布匹缺陷检测数据集

一、简要 布匹瑕疵是指在布料生产过程中或后续处理中出现的各种不符合质量标准或期望的缺陷。这些瑕疵可能源自原料、织造工艺、染色、印花、加工等多个环节。布匹瑕疵的类型繁多,涵盖了结构瑕疵和质量瑕疵两大类。结构瑕疵指的是布料本身的缺陷,包括嵌…

Skia最新版CMake编译

运行示例:example/HelloWorld.cpp Skia: 2024年03月08日 master分支: 993a88a663c817fce23d47394b574e19d9991f2f 使用CMake编译 python tools/git-sync-depsbin/gn gen out/config --idejson --json-ide-script../../gn/gn_to_cmake.py此时output目录会生成CM…

指数幂+力扣

题目 题目链接 . - 力扣(LeetCode) 题目描述 代码实现 class Solution { public:double myPow(double x, int n) {long t n;return t > 0 ? _myPow(x, t) : 1 / _myPow(x, -t);}double _myPow(double x, int n){if(n 0) return 1;double y _…

【解决】Sublime Text找不到Package Control选项,且输入install也不显示Install Package(其中一种情况)

【问题描述】 Sublime Text 找不到 Package Control 选项,且输入 install 也不显示 Install Package 【解决方法】(其中一种情况) 1、工具栏 Preferences -> Settings,点开查看设置文档 2、检查 "ignored_packages&q…

Vue+OpenLayers7入门到实战:OpenLayers地图鼠标点击事件使用,点击地图后弹框并显示当前位置经纬度

返回《Vue+OpenLayers7》专栏目录:Vue+OpenLayers7入门到实战 前言 本章介绍如何使用OpenLayers7在地图上监听点击事件,以及监听地图点击事件后进行简单弹框并获取当前点击位置的经纬度并显示wgs84坐标位置和度分秒格式经纬度信息。 二、依赖和使用 "ol": "…

【开发】JavaWeb开发中如何解析JSON格式数据

目录 前言 JSON 的数据类型 Java 解析 JSON 常用于解析 JSON 的第三方库 Jackson Gson Fastjson 使用 Fastjson Fastjson 的优点 Fastjson 的主要对象 JSON 接口 JSONObject 类 JSONArray 类 前言 1W:什么是JSON? JSON 指 JavaScrip t对象表…

上手OpenMMLab——从零开始通过mmagic上手AIGC

上手OpenMMLab——从零开始通过mmagic上手AIGC 目录 上手OpenMMLab——从零开始通过mmagic上手AIGC**写在前面****MMagic简介与特性****环境搭建与初步探索****文本生成与编辑****图像生成与风格迁移****音频生成与语音合成****高级应用与案例分享** **总结****附录&#xff1a…

sqli-labs练习

2关 找出数据库名字 从数据库security 中找到表明名: 找到数据库名字: 从表users中找到列: 取出表users用户名和密码:用户名~密码 3关 判断出id是(‘id’)的形式 4关 双引号测试报错,推测是(“id“) 5关 填写id=1没有回显信息(布尔盲注一般适用于页面没有回显字…

力扣--动态规划97.交错字符串

思路分析: 动态规划数组定义: dp[i][j] 表示:使用字符串 s1 的前 i 个字符和字符串 s2 的前 j 个字符,能否构成字符串 s3 的前 i j 个字符的交错组合。 初始化: dp[0][0] 初始化为 1,表示空串是 s1 和 s2 …

蓝桥杯练习系统(算法训练)ALGO-980 斐波那契串

资源限制 内存限制:256.0MB C/C时间限制:10.0s Java时间限制:30.0s Python时间限制:50.0s 问题描述 斐波那契串由下列规则生成:   F[0] "0";   F[1] "1";   F[n] F[n-1] F[n-2]…

2024年最新《国际预警期刊》正式更新!

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、国际期刊预警名单的变化?二、课程案例展示(篇幅有限仅展示部分)1.【热图系列】2.【九象限图系列】3.【富集分析系列】4.【机…
最新文章