git 如何知道本地存储库何时发生变化?

How does git know when there is change in the local repo?

当您更改工作目录中的文件时,git 确切地知道更改了哪个文件。它是怎么知道的?

Q1) 它是否在提交时计算校验和并在事件驱动的更改(例如在工作目录中创建新文件)时重新计算校验和。

Q2) 除了工作目录文件之外,您的本地驱动器是否将其余文件保留在某个位置,该位置随着您包含更多项目而增长?我的驱动器似乎更满 C:\Users\<USER NAME>\Downloads\.git\objects 添加了一个我试图跟踪的新文件夹,现在我想撤消我试图跟踪的文件夹,我如何收回那个 space。 我试图用 GIT 做一些有趣的事情,比如跟踪我的本地项目文件和其他文档的更改,这样我就可以看到已更改的文档并仅使用这些文件更新我的备份。

Git 根据文件内容计算哈希并在提交时存储快照。哈希既用作内容的标识符,又用作将快照与更高版本进行比较的简单方法。

因此,如果您有文件的提交版本和工作副本版本,Git 所要做的就是计算工作文件的哈希值并将其与已计算的哈希值进行比较从提交的快照。如果哈希值不相同,那么它就知道发生了某些变化。此计算仅在您询问时发生(例如 git statusgit diff)。它不会经常自行检查。

Git 将所有内容存储在存储库中。这通常位于项目根目录的 .git/ 目录中。整个存储库历史和内容都在里面,因此根据您的历史包含的内容,有时它们确实会变大。这确实取决于项目。 Git 擅长压缩内容,但如果您要添加大的预压缩文件,它只能做这么多来缩小它们。

你在问题中提到的 .git/objects/ 目录是 git 存储库中的主要内容存储。所有文件快照和元数据(如目录结构、提交对象、标签)都存储在那里。所以它是存储库文件夹中最大的部分是正常的。

取消创建 git 存储库很容易 - 只需删除 .git 文件夹即可。但是,这是一种您无法撤消的破坏性操作。仅当您不介意丢失存储库历史记录时才删除它(或者,如果您在其他地方制作了副本,例如 GitHub,或备份副本,并且您可以依赖其他副本) .