当本地回购发生变化时,git如何知道?

new*_*777 1 git hash storage checksum

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

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

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

Dan*_*owe 5

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

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

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

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

取消git存储库很简单 - 只需删除该.git文件夹即可.但是,这是一种无法撤消的破坏性行为.只有在你没有丢失存储库历史记录的情况下才能删除它(或者,如果你在其他地方制作了一个副本,比如GitHub,或者备份副本,你可以依赖其他副本).