Git 如何在操作系统上跟踪文件更改的信息?

How does Git tracks info of file changes on top of OS?

提问人:nanosoft 提问时间:8/19/2023 更新时间:8/19/2023 访问量:36

问:

Git 文档说:

Git 中的所有内容在存储之前都会进行校验和,然后 由该校验和引用。这意味着不可能更改 Git 不知情的任何文件或目录的内容。

根据我的理解,上面只能通过在用户和操作系统之间再引入一个步骤来保存文件来完成,即在保存 Git 存储库中的文件之前,首先创建它的校验和并由 Git 保存为跟踪信息,然后只将保存操作控制权交还给操作系统并保存文件。我搜索了一下,但没有找到任何关于场景活动后面的段落。任何描述、指针、链接?

git 校验和

评论

0赞 LeGEC 8/19/2023
git 不会对文件系统事件做出反应,它会在运行 git 命令时计算 formation 中所需的 (, , ...)。唯一的优化是:它确实依赖于文件系统的修改日期来避免重新计算每个文件的哈希值。git statusgit diff
0赞 jthill 8/23/2023
不,你已经把事情的运作方式弄得一团糟。文件可以随时(重新)命名,无论 Git 在写入文件之前、之后或期间计算出添加内容的哈希值都无关紧要。

答:

1赞 Zahid Khan 8/19/2023 #1

你的问题是关于“git 内部是如何工作的?

为了在黑匣子中回答您的问题,我将分 2 个步骤进行:

  1. 当您创建一个名为 .git 的文件夹时。git init
  2. 此文件夹跟踪该目录中的所有文件和文件夹,但您明确忽略的文件和文件夹除外 - 这些文件将保存到 .gitignore 文件中。

每当对文件进行任何更改时,都会直接对工作目录进行这些更改。操作系统对 git 系统一无所知,也不知道是否存在。

git 巧妙地维护了 Blob 结构,因此它会检查您将要提交的最新更改与现有更改,并检查上一个和当前工作目录之间的差异。

你可以在这里找到关于内部结构的更深入的讲座。