减少.git目录中文件的数量

3
我正在使用 Git 进行一个中等规模的项目:大约800个提交和100个文件左右。我的 .git 文件夹大小为18.8MB(我可以理解,似乎跟包含的文件大小有关),其中包含了5586个文件。这看起来太多了——我甚至可以说是荒谬的。
过多的文件对文件系统来说很困难,如果你必须同步该文件夹,那就更加困难。这就是它应该是的吗?有没有降低它的方法?我处理这种情况的天真方式只是将所有所需文件放在某种档案文件中。

1
你尝试过执行 git gc 命令吗? - ElpieKay
1个回答

5

简而言之:这是正常的。不用担心。

如果您愿意,可以运行git gc,但那会自动运行。

许多文件对文件系统造成负担。

不,只有在某些类型的文件系统中,一个目录下的许多文件才会使查找该目录中的文件变慢。特别是将目录内容存储为链接列表的文件系统。他们必须遍历整个文件列表。这是FAT32和ext2上的问题。

现代文件系统(如Windows的NTFS,许多Linux的ext3和ext4以及OS X的HFS +)可以通过使用B-Tree的变体有效地处理目录中的大量文件。

此外,Git是由内核开发人员开发的,他们知道自己在做什么。Git不会将其对象放在单个目录中,而是使用对象ID的前两个字符将其拆分为子目录。由于提交ID是哈希值,它们将均匀分布在许多目录中。
最后,Git的最新版本将定期通过将它们压缩成packfiles来减少单个对象文件的数量。

如果您必须同步该文件夹,则会更加困难

这意味着您已将Git放到像Dropbox这样的共享驱动器上。将Git放在Dropbox上就像拆卸卡车并将其邮寄给自己一样。这很慢,花费高昂,您可能会丢失部件,而您本可以直接开车去。Dropbox可能会影响Git的性能,并破坏存储库。任何具有慢seek时间的内容(例如网络驱动器)对于Git都非常不利,因为Git将文件系统用作简单的对象数据库。

Git是一种分布式版本控制系统。如果您想分发您的代码库,请使用Git。它非常高效。您可以将代码库保存在Dropbox上,但请使用git-remote-dropbox进行安全操作。您也可以使用现有的Git托管服务,如Github或Gitlab。或者,您可以将裸仓库放在您拥有SSH访问权限的某个地方


1
git gc 工作了 - 它告诉我要修剪,经过两者的处理后,文件数量减少了约10倍。谢谢。然而,许多文件总体上仍然是一个主要问题。我可以观察文件夹属性并计算文件数量这一事实证明它们是一个问题。此外,Dropbox 比设置某种类型的服务器要容易得多 - 我知道这会激怒很多人,但事实就是如此。我会坚持使用它。大量文件会完全毁掉 DB。 - Basti
@Basti "我可以查看文件夹属性并计算文件数量的事实表明它们是一个问题。" 不,这不是。Git不必计算文件,它直接访问它们,非常高效。您关心的是损坏和速度,使用Git在Dropbox上可能会破坏Git存储库并使其变慢。阅读有关Git和Dropbox的答案。考虑使用git-remote-dropbox并阅读其FAQ。 - Schwern
这是一个Windows的问题,我同步我的repo到DB上,然后暂停。这是最好的解决方案。我不想使用第三方工具,因为Dropbox在我的环境中很普遍。它也是一种额外的备份,以防git决定爆炸。像我这样的凡人不是git大师 - 我永远不会使用除提交(通过gui)和查看日志之外的任何命令。Git对于像我这样的人来说是非常脆弱的工具。 - Basti
@Basti 如果你不努力学习你的工具,那么你的工具就不会很好用。如果你告诉自己你做不到,那么你就做不到。Git虽然很难,但它变得越来越容易,而且它非常强大和普遍,值得学习。你可以学习Git,一旦掌握了,它其实很简单。你将更加享受使用工具的乐趣,人们也不会对你这么生气。 - Schwern
更加严肃地说,微软已经发布了一些关于他们使用整个“git文件系统”处理事情的帖子,这种方式以更懒惰的方式处理事情。我认为其中一些东西将来会向公众开放。他们管理像Windows操作系统之类的东西,仓库中有数百万个文件,并对如何处理它们进行了一些超越常规的设计变化。 - Lasse V. Karlsen
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接