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

Bas*_*sti 3 git

我正在将 git 用于一个中型项目:约 800 次提交,可能有 100 个左右的文件。我的 .git 文件夹有 18.8mb(据我所知,似乎是按照包含的文件大小的顺序排列)和 5586 个文件。这似乎太过分了——我什至会这么说,这很可笑。

许多文件在文件系统上都很困难,如果您必须同步该文件夹,则更加困难。事情就应该这样吗?有办法降低吗?我处理此类问题的天真方法是将所有需要的文件放入同一类型的存档中。

Sch*_*ern 5

tl;dr:这是正常的。别担心。

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

许多文件对文件系统来说很困难

不可以,在某些类型的文件系统上,单个目录中的许多文件可能会导致在该目录中查找文件的速度变慢。特别是将目录内容存储为链接列表的文件系统。他们必须遍历整个文件列表。这是 FAT32 和 ext2 上的问题。

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

此外,Git 是由内核开发人员开发的,他们知道自己在做什么。Git 不会将其对象放在单个目录中,而是使用对象 ID 的前两个字符将它们分解为子目录。由于提交 ID 是哈希值,因此它们将均匀分布在许多目录中。

最后,最新版本的 Git 将通过将单个目标文件压缩为packfiles来定期减少单个目标文件的数量。

如果您必须同步该文件夹,那就更难了

这意味着您已将 Git 放到共享驱动器(例如 Dropbox)上。将 Git 放到 Dropbox 上就像拆开一辆卡车然后通过邮寄方式邮寄给自己。它很慢,很贵,你可能会丢失碎片,而且你本来可以开卡车。Dropbox 可能会降低 Git 性能并损坏存储库。任何seek像网络驱动器这样速度慢的东西对于使用文件系统作为简单对象数据库的 Git 来说都是非常糟糕的。

Git 是一个分布式版本控制系统。如果您想分发存储库,请使用 Git 来完成。它的效率非常高。您可以将存储库保留在 Dropbox 上,但使用git-remote-dropbox可以安全地进行操作。您可以使用现有的 Git 托管服务,例如 Github 或 Gitlab。或者您可以将裸存储库放在您可以通过 ssh 访问的位置