3

我正在尝试使用 git 在网站上实施新的备份系统。虚拟专用服务器总共有 20GB 空间,其中 5GB 可用空间。

当我git add ./var/www(使用我最喜欢的.gitignore参数)运行时,我有一个巨大的 git 文件夹,它将我的硬盘驱动器填满。

目前尚不清楚为什么会发生这种情况,因为我希望.git目录包含有关位(元信息)的位,而不是我所有文件的二进制副本!

这里发生了什么?如果我的网站是 14GB,该.git目录会占用额外的 14GB 空间吗?

4

4 回答 4

4

已用空间等于 GIT_DIR + GIT_WORK_TREE

如果我的网站是 14GB,.git 目录会额外占用 14GB 吗?

为了过度简化这个案例,是的。在非裸存储库中,Git 将所有跟踪的文件 blob 以及其他存储库对象(例如树和提交)存储在GIT_DIR下。它还在GIT_WORK_TREE中维护副本。

存储库使用 packfiles 和 deltification 来防止这种情况在正常用例中失控,但是如果您在非裸存储库中有 14GB 以上的数据——特别是如果这些文件中有很多是二进制资产——那么您很可能会在磁盘使用量上翻倍(或更糟)。

于 2012-07-23T01:08:38.190 回答
1

git repo 包含文件的整个历史记录。.git 文件夹将包含您工作目录中的所有位,因此您可以预期它会增加大小。由于压缩,它不会翻倍,但它会很重要。并且当您更改文件时,即使工作树的大小没有增加,repo 的总大小也会增加,因为历史记录已被存储。

于 2012-07-23T01:00:52.857 回答
1

.git 文件夹将包含存储库中每个文件的完整历史记录以及对这些文件所做的每次更改。

它可能不是额外的 14GB,因为它具有相当好的压缩率,但它会接近。

于 2012-07-23T01:01:01.890 回答
1

任何版本控制系统都需要在某处拥有这些位的副本,以便在您更改文件时它必须知道它们是什么。

大多数 VCS 在处理大型二进制文件时表现不佳。我不认为 14GB 全部由人类编写是预期的并且会改变。照片通常不适合 VCS;数据库使候选人更差。git 旨在管理人类编写的文本,它的所有近亲也是如此。

于 2012-07-23T01:02:11.820 回答