当前位置:首页 > 科技  > 软件

每天都提交代码,那你知道.git目录内部的秘密吗?

来源: 责编: 时间:2024-04-08 08:59:22 107观看
导读在每一个 git 仓库中都有一个隐藏的.git目录,git 的很多秘密都藏着这里面,包括分支、提交记录、配置、日志等等。作为一个有实力有低调的开发者来说,你了解其中每个目录、每个文件都代表着什么吗?它们的作用又是什么呢?图

在每一个 git 仓库中都有一个隐藏的.git目录,git 的很多秘密都藏着这里面,包括分支、提交记录、配置、日志等等。BfL28资讯网——每日最新资讯28at.com

作为一个有实力有低调的开发者来说,你了解其中每个目录、每个文件都代表着什么吗?它们的作用又是什么呢?BfL28资讯网——每日最新资讯28at.com

图片图片BfL28资讯网——每日最新资讯28at.com

以下是 .git目录的完整结构,看上去也是比较简单的,git 就是用这个结构管理这复杂的版本关系。BfL28资讯网——每日最新资讯28at.com

.git |----config |----objects | |----0d | | |----1d218acc58d857329cde3778d7429037079627 | | |----60436b1116e54b3ed9a4b9fec1f2f9916a73ca | |----59 | | |----a10af7aa35f521b9a41569785d4481850192e3 | |----92 | | |----5f4810ed4da9873771f14f2ca1ab97db81283a | | |----6c85f1ad90849159b2c616a9744ba62abe8f6a | | |----c359f0b8d09e2fc137c865043d4f6951989cdd |----HEAD |----info | |----exclude |----logs | |----HEAD | |----refs | | |----heads | | | |----main | | |----remotes | | | |----origin | | | | |----main |----description |----hooks | |----commit-msg.sample | |----pre-rebase.sample | |----pre-commit.sample | |----applypatch-msg.sample | |----fsmonitor-watchman.sample | |----pre-receive.sample | |----prepare-commit-msg.sample | |----post-update.sample | |----pre-merge-commit.sample | |----pre-applypatch.sample | |----pre-push.sample | |----update.sample | |----push-to-checkout.sample |----refs | |----heads | | |----main | |----tags | |----remotes | | |----origin | | | |----main |----index |----COMMIT_EDITMSG

HEAD(当前分支)

有一个叫做 HEAD文件,这个文件一听名字就比较重要,它的作用就是存储当前仓库正在使用的分支名称。BfL28资讯网——每日最新资讯28at.com

查看其内容,如下面这样,表示当前正在使用 main 分支。BfL28资讯网——每日最新资讯28at.com

ref: refs/heads/main

或者下面这样,表示正在使用 dev 分支。BfL28资讯网——每日最新资讯28at.com

ref: refs/heads/dev

refs

在 .git/refs 目录下有 heads、tags、remotes三个子目录,用来存储最新的提交记录引用的。BfL28资讯网——每日最新资讯28at.com

|----refs| |----heads| | |----main| |----tags| |----remotes| | |----origin| | | |----main

这三个目录的作用都是用来标示最新一次的提交记录的。BfL28资讯网——每日最新资讯28at.com

.git/refs/heads

例如我本地只有 main分支,那就会在这里存在一份.git/refs/heads/mian的文件,文件内容如下:BfL28资讯网——每日最新资讯28at.com

2ddc65b74a186f4332d7b218be0f18dd404c82ef

这个值就是 main 分支最新一次提交记录的引用,引用指向 .git/objects这个目录,这里面记录了每一次提交的详情信息。BfL28资讯网——每日最新资讯28at.com

.git/refs/remotes

.git/refs/heads存的是本地分支提交记录的引用,而  .git/refs/remotes存的是远程分支的提交记录引用,这样一来,git就能够在本地跟踪远程仓库的分支变化。BfL28资讯网——每日最新资讯28at.com

.git/refs/tags

我们在管理代码的时候,可能在某些时候对当前版本打一个标签,标记某些重要的版本,这样就会在 .git/refs/tags目录下形成记录,标示某个tag的最新一次提交记录引用。BfL28资讯网——每日最新资讯28at.com

.git/refs/stash

除了这三个目录外,还有可能包含 stash这个目录,如果你用过「本地暂存」这个功能的话。BfL28资讯网——每日最新资讯28at.com

什么情况下会用这个功能呢?BfL28资讯网——每日最新资讯28at.com

  1. 临时切换到其他分支,当你正在当前分支上进行工作,但需要暂时切换到其他分支,而又不想提交当前工作目录的改动时,可以使用git stash将改动保存起来,切换分支后再用git stash pop或git stash apply恢复。
  2. 临时保存,假设你两天前拉取了某个文件,改了一部分,但是一直没完成。在这期间呢,你的同事也把这个文件改了,那你提交的时候就会有冲突。这种情况下,你可以先把你本地的暂存起来,然后再拉取最新代码,之后再把暂存的改动恢复过来。

提交记录 (.git/objects)

前面介绍 refs时说的最新一次的提交记录引用,其引用的目标就是.git/objects这个目录。拿前面那个 main分支的最后一次提交引用来讲。BfL28资讯网——每日最新资讯28at.com

图片图片BfL28资讯网——每日最新资讯28at.com

上面这一串16进制字符串,可以分为两个部分,前两位是一个部分,后两位是一个部分,前两位作为目录,后面的是文件名称。BfL28资讯网——每日最新资讯28at.com

所以在 .git/objects中存在 .git/objects/2d/dc65b74a186f4332d7b218be0f18dd404c82ef这样一个文件,里面存的就是某次提交的详细信息,直接查看的话,只能看到乱码,要用 git 自己的命令才行。BfL28资讯网——每日最新资讯28at.com

git cat-file -p 2ddc65b74a186f4332d7b218be0f18dd404c82ef

查看到的提交详情,主要是提交树、作者、提交者以及提交messageBfL28资讯网——每日最新资讯28at.com

图片图片BfL28资讯网——每日最新资讯28at.com

通过 tree的记录值,可以查看本次提交所涉及的所有文件树。依然是 通过下面的命令查看,后面的一串hash值,就是上图的 tree 的值。BfL28资讯网——每日最新资讯28at.com

git cat-file -p f8803d7d049edbbc981da732b855419d039f79ff

得到的结果如下:BfL28资讯网——每日最新资讯28at.com

图片图片BfL28资讯网——每日最新资讯28at.com

再用 git cat-file -p 命令可以查看上图类型为 blob的文件的内容。BfL28资讯网——每日最新资讯28at.com

图片图片BfL28资讯网——每日最新资讯28at.com

日志 (.git/logs)

这里记录的每一次的提交日志,包括当前使用的分支、本地分支、远程分支。BfL28资讯网——每日最新资讯28at.com

|----logs| |----HEAD| |----refs| | |----heads| | | |----main| | |----remotes| | | |----origin| | | | |----main

以行为单位,每一行都存储了一次提交的具体信息。BfL28资讯网——每日最新资讯28at.com

图片图片BfL28资讯网——每日最新资讯28at.com

从左到右分别表示提交之前的hash、提交之后的hash、提交用户、时间戳、提交的message。BfL28资讯网——每日最新资讯28at.com

config (配置)

.git/config 是当前仓库的配置文件,这个文件,大多数开发同学应该还是比较熟悉的。这个配置只对当前仓库有效。BfL28资讯网——每日最新资讯28at.com

了解了前面的内容后,再看一下这个配置文件,应该就很好理解了。BfL28资讯网——每日最新资讯28at.com

[core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true ignorecase = true precomposeunicode = true[remote "origin"] url = https://github.com/xxxx/xxxx-blog.git fetch = +refs/heads/*:refs/remotes/origin/*[branch "main"] remote = origin merge = refs/heads/main

index (暂存区)

.git/index 文件是 暂存区。它保存了当前仓库中所有被 git 跟踪的文件的状态信息,包括文件名、文件的权限和位置等。当执行git add命令时,git 将要提交的文件的快照信息暂存到这个索引文件中,而不是直接提交到仓库。BfL28资讯网——每日最新资讯28at.com

当执行git commit命令时,git 会将索引文件中的内容提交到版本库中,从而创建一个新的提交记录。BfL28资讯网——每日最新资讯28at.com

hooks (钩子)

hook 对于程序员来讲肯定不陌生,可以看做是一个生命周期的事件处理,例如提交代码后,触发某个动作,「提交代码后」这个节点就是个 Hook,在这个Hook里我们可以加入一些自定义的处理逻辑来达到某些目的。BfL28资讯网——每日最新资讯28at.com

例如 pre-commit(在执行提交前运行)、post-commit(在提交后运行)、pre-push(在执行推送前运行)等。BfL28资讯网——每日最新资讯28at.com

怎么样, 学废了吗?BfL28资讯网——每日最新资讯28at.com

本文链接://www.dmpip.com//www.dmpip.com/showinfo-26-81869-0.html每天都提交代码,那你知道.git目录内部的秘密吗?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 如果你还不理解 RBAC,看看 Jenkins 如何做到的

下一篇: 父组件使用v-model,子组件竟然不用定义props和emit抛出事件

标签:
  • 热门焦点
  • 消息称迪士尼要拍真人版《魔发奇缘》:女主可能也找黑人演员

    消息称迪士尼要拍真人版《魔发奇缘》:女主可能也找黑人演员

    8月5日消息,迪士尼确实有点忙,忙着将不少动画改成真人版,继《美人鱼》后,真人版《白雪公主》、《魔发奇缘》也在路上了。据外媒消息称,迪士尼将打造真人版
  • 8月总票房已突破10亿!《封神》第一:口碑已经成了

    8月总票房已突破10亿!《封神》第一:口碑已经成了

    8月5日消息,据灯塔专业版数据,截至8月5日9时35分,8月总票房(含预售)已突破10亿。其中,《封神》以大比分的优势领先。根据官方消息,目前该片总票房已经超过14.
  • JavaScript 混淆及反混淆代码工具

    JavaScript 混淆及反混淆代码工具

    介绍在我们开始学习反混淆之前,我们首先要了解一下代码混淆。如果不了解代码是如何混淆的,我们可能无法成功对代码进行反混淆,尤其是使用自定义混淆器对其进行混淆时。什么是混
  • 一文看懂为苹果Vision Pro开发应用程序

    一文看懂为苹果Vision Pro开发应用程序

    译者 | 布加迪审校 | 重楼苹果的Vision Pro是一款混合现实(MR)头戴设备。Vision Pro结合了虚拟现实(VR)和增强现实(AR)的沉浸感。其高分辨率显示屏、先进的传感器和强大的处理能力
  • 服务存储设计模式:Cache-Aside模式

    服务存储设计模式:Cache-Aside模式

    Cache-Aside模式一种常用的缓存方式,通常是把数据从主存储加载到KV缓存中,加速后续的访问。在存在重复度的场景,Cache-Aside可以提升服务性能,降低底层存储的压力,缺点是缓存和底
  • 本地生活这块肥肉,拼多多也想吃一口

    本地生活这块肥肉,拼多多也想吃一口

    出品/壹览商业 作者/李彦编辑/木鱼拼多多也看上本地生活这块蛋糕了。近期,拼多多在App首页“充值中心”入口上线了本机生活界面。壹览商业发现,该界面目前主要
  • 大厂卷向扁平化

    大厂卷向扁平化

    来源:新熵作者丨南枝 编辑丨月见大厂职级不香了。俗话说,兵无常势,水无常形,互联网企业调整职级体系并不稀奇。7月13日,淘宝天猫集团启动了近年来最大的人力制度改革,目前已形成一
  • 华为Mate 60系列用上可变灵动岛:正式版体验将会更出色

    华为Mate 60系列用上可变灵动岛:正式版体验将会更出色

    这段时间以来,关于华为新旗舰的爆料日渐密集。据此前多方爆料,今年华为将开始恢复一年双旗舰战略,除上半年推出的P60系列外,往年下半年的Mate系列也将
  • 国行版三星Galaxy Z Fold5/Z Flip5发布 售价7499元起

    国行版三星Galaxy Z Fold5/Z Flip5发布 售价7499元起

    2023年8月3日,三星电子举行Galaxy新品中国发布会,正式在国内推出了新一代折叠屏智能手机三星Galaxy Z Fold5与Galaxy Z Flip5,以及三星Galaxy Tab S9
Top
Baidu
map