使用 Git 管理包含超过 80k 文件的大型存储库

Posted

技术标签:

【中文标题】使用 Git 管理包含超过 80k 文件的大型存储库【英文标题】:Managing large repositories having more than 80k files with Git 【发布时间】:2022-01-03 11:18:20 【问题描述】:

我正在寻找在 git 上管理 dotnet 遗留应用程序的庞大代码库的选项。 组织正计划转向 git 操作,但在 Bitbucket 上克隆 webpack 需要几分钟(20 25 分钟)。即使使用 50 Mbps LAN 有线连接 在设置存储库时,初始提交和 git push 也需要相似的时间。

我们使用 Bitbucket DataCenter 作为存储库托管服务。

WebApp的文件夹结构: Bitbucket 上的存储库大小:1.47 GB(压缩后)

Webapp:包含所有源代码文件(aspx.vb,html,css文件,30k以上代码文件)

磁盘大小:1.11 Gb

服务:包含 svc 和 .dll 文件

磁盘大小:208 Mb

SOA:包含 .dll 和批处理文件和服务源代码(.sln 文件)

磁盘大小:3.1 Gb

磁盘上项目的总大小:4.8 Gb

有没有什么方法可以有效地使用 git 系统来处理如此繁重的应用程序?如果有人能提出管理它的好方法,将不胜感激。 感谢您的宝贵时间!

【问题讨论】:

【参考方案1】:

假设服务和 SOA 不经常更改,您可以使用同一存储库的两个本地克隆,使用 git sparse-checkout

只有通用部分(服务、SOA) 仅包含您需要更新的部分,从第一个存储库创建到其他部分(服务、SOA)的符号链接。

确保使用 Git 2.34+,因为它带有 sparse-index,如 Derrick Stolee 的“Make your monorepo feel small with Git’s sparse index”中所述。

sparse-checkout 允许您快速克隆和合理结帐。 sparse-index 允许像 git status 这样的命令变得活泼。

另一种方法涉及Git LFS (Large File Storage),它涉及远程Hit存储库托管服务支持(在您的情况下是指BitBucket)。

这是可能的,但将limits and quotas 与存储的大文件量相关联。

【讨论】:

嗨,感谢您的回复@VonC,我将不得不检查 git sparse 功能,将尝试用例并更新。在寻找解决方案的同时,我遇到了 git LFS 概念,只是好奇使用 LFS 可以帮助我解决这种情况还是仅用于处理二进制文件或单个实体的大型文件? @PratikM 顾名思义(大文件存储),它仅适用于大文件。我已经使用有关 LFS 的相关链接编辑了答案。

以上是关于使用 Git 管理包含超过 80k 文件的大型存储库的主要内容,如果未能解决你的问题,请参考以下文章

git-svn忽略大型二进制文件

在 Git 中删除超过 90 天的文件版本

Git 存储库太大

在我的大型机 USS 文件夹上克隆 Git 存储库时出错

在大型项目中使用 zend 框架和 git

unity 大型游戏资源分包管理(包含下载地址)