git是否复制了我的所有文件?

时间:2012-07-23 00:57:48

标签: git backup-strategies

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

当我在git add .(使用我最喜欢的/var/www参数)运行.gitignore时,我有一个巨大的git文件夹,可以让我的硬盘充满容量。

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

这是怎么回事?如果我的网站是14GB,那么.git目录会占用额外的14 GB吗?

4 个答案:

答案 0 :(得分:4)

使用的空间等于GIT_DIR + GIT_WORK_TREE

  

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

非常简单地过度简化案例,是的。在非裸存储库中,Git存储所有跟踪的文件blob,以及 GIT_DIR 下的树和提交等其他存储库对象。它还在 GIT_WORK_TREE 中维护副本。

存储库使用packfiles和deltification来保持这种状态在正常用例中失控,但是如果你在非裸存储库中有14GB +的数据 - 特别是如果很多这些文件是二进制的资产 - 那么你可能会在磁盘使用上加倍(或更糟)。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

任何版本控制系统都需要在某处更改位,以便在更改文件时知道它们是什么。

大多数VCS在使用大型二进制文件时效果不佳。我不认为14GB是由人类所有人所预期和改变的。照片通常会成为VCS的不良候选人;数据库使得更糟糕的候选人git旨在管理人类写的文本,所有它的近亲都是。