git init 执行后发生了什么?

这篇具有很好参考价值的文章主要介绍了git init 执行后发生了什么?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

git init 执行后发生了什么?,重学Git,git,后端,github
在讲解.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

git init 执行后发生了什么?,重学Git,git,后端,github
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引用

git init 执行后发生了什么?,重学Git,git,后端,github

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

git init 执行后发生了什么?,重学Git,git,后端,github

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

在特定的重要动作发生时触发这些脚本,主要有两种类型钩子:客户端钩子和服务器端钩子:客户端钩子由诸如提交和合并这样的操作所调用,而服务器端钩子作用于诸如接收被推送的提交这样的联网操作。上述的示例脚本就是客户端钩子脚本。文章来源地址https://www.toymoban.com/news/detail-822840.html

到了这里,关于git init 执行后发生了什么?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 没有显示.git文件夹 git init之后

    当你在目标文件夹地址栏cmd,敲git init之后, 但是文件里却没有显示  原因是:.git 文件被隐藏了,你只要打开显示就可以了。 如果你是window 11 ,在文件夹右键,打开显示隐藏文件就可以了 如果你是window10系统,点击菜单栏上方的查看-勾选上隐藏的项目,就可以显示出来了

    2024年02月12日
    浏览(61)
  • MySQL执行流程_执行一条select语句,期间发生了什么

    MySQL执行流程 server层负责建立连接、分析和执行SQL 包括连接器、查询缓存、解析器、预处理器、优化器、执行器等,所有内置函数和所有跨存储引擎的功能在该层实现 存储引擎层负责数据的存储和提取 索引数据结构就是由存储引擎层实现,不同的存储引擎支持的索引类型也

    2024年02月04日
    浏览(55)
  • [BUG] husky + github desktop + nvm 执行git操作时报错:“PREFIX“、husky/pre-push: 4: npm: not found

    在我的开源项目 SwanLab 中,通过 husky 实现了几个 git hook,以实现代码提交时的代码风格格式化、代码格式检查等等操作,以规范和检查代码。但是因为环境变动,触发了一些bug: 在我使用 github desktop(一个 git 操作的 ui 工具)将本地的提交推送到远程时,出现了错误(但是

    2024年01月19日
    浏览(40)
  • 武林新秀(一)`git init` 初始化一个新的Git仓库

    git init 是 Git 版本控制系统中用于初始化一个新的 Git 仓库或重新初始化一个现有的仓库的命令。“init” 是 “initialize”(初始化)的缩写。执行此命令后,会创建一个名为 .git 的子目录,其中包含所有的仓库元数据,这使得目录成为一个 Git 仓库。 基本语法: --bare : 创建一

    2024年02月10日
    浏览(58)
  • git submodule update --init 失败解决办法

    我们在github上寻找开源项目的源码,clone下来研究的时候,由于项目需要多个开源项目的支持,所有还需要二次clone子工程的源码支持,比如最近在使用: grpc 在clone子模块的时候会出现失败或无法访问的情况,其原因众所周知无非就是有些东西需要科学上网 找到项目的.gitmodul

    2024年02月16日
    浏览(43)
  • 【Git】git push origin master时发生的各类错误汇总

    使用 git 命令时,您可以执行一系列操作来管理代码仓库。下面是一些常用的 git 命令及其功能: git init : 在当前目录初始化一个新的 git 仓库。 git clone 仓库URL : 克隆远程仓库到本地。 git add 文件 : 将指定的文件添加到暂存区。 git commit -m \\\"提交信息\\\" : 将暂存区的文件提交到版

    2024年02月04日
    浏览(60)
  • git两个分支发生同步修改问题的解决

    比如你有两个分支:master和v1.0。当你在v1.0中修改了内容后,切换到master分支,发现master中也同步修改了。 这是因为,git会把没有commit的内容直接移到你要checkout的branch上面去,而且如果此时对这个新跳转的branch中,原来修改的内容进行二次修改。 1️⃣ 方案一: 再回到原来

    2024年02月11日
    浏览(46)
  • git push 推送至远程仓库发生报错

    git push origin master To https://gitee.com/ /hello-git.git ! [rejected] master - master (fetch first) error: failed to push some refs to \\\'https://gitee.com/ /hello-git.git’ hint: Updates were rejected because the remote contains work that you do hint: not have locally. This is usually caused by another repository pushing hint: to the same ref. You may wan

    2024年02月13日
    浏览(72)
  • git submodule update --init命令速度太慢的解决方法

    我们在 clone 某个代码库时,代码库可能使用了其他代码库的资源,开发者为避免重复开发,将使用到的其他库以链接的方式作为公共资源保存,我们需要在 clone 之后执行以下命令才能得到完整的依赖: 但是在执行 git submodule update --init 命令时,由于没有提示条,且看不到实

    2024年02月12日
    浏览(64)
  • Git 代码提交到远程主分支后发生冲突或者覆盖

    在提交代码的时候,有两个人,比如叫A与B,现在A从远程主分支master拉了代码到自己本地,本地电脑形成local A与local B分支,然后写了自己的需求代码commit并推送到远程仓库,形成自己的origin A与origin B,然后两个人进行合并请求merge request,请求merge后,master主分支里代码少了

    2024年02月07日
    浏览(69)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包