跳至主要内容

关于 GitHub 上的大文件

GitHub 限制了您可以在常规 Git 存储库中跟踪的文件大小。了解如何跟踪或删除超出限制的文件。

平台导航

关于 GitHub 的大小限制

GitHub 试图为所有 Git 存储库提供充足的存储空间,尽管对文件和存储库大小存在硬性限制。为了确保我们用户的性能和可靠性,我们积极监控整体存储库健康的信号。存储库健康是各种相互作用因素的函数,包括大小、提交频率、内容和结构。

文件大小限制

GitHub 限制了存储库中允许的文件大小。如果您尝试添加或更新大于 50 MiB 的文件,Git 会发出警告。更改仍会成功推送到您的存储库,但您可以考虑删除提交以最大程度地减少性能影响。有关更多信息,请参阅“从存储库的历史记录中删除文件”。

注意

如果您通过浏览器将文件添加到存储库,则文件大小不能超过 25 MiB。有关更多信息,请参阅“将文件添加到存储库”。

GitHub 会阻止大于 100 MiB 的文件。

要跟踪超出此限制的文件,您必须使用 Git 大型文件存储 (Git LFS)。有关更多信息,请参阅“关于 Git 大型文件存储”。

如果您需要在存储库中分发大型文件,则可以在 GitHub.com 上创建发布版,而不是跟踪文件。有关更多信息,请参阅“分发大型二进制文件”。

Git 并非旨在处理大型 SQL 文件。要与其他开发人员共享大型数据库,我们建议您使用文件共享服务。

存储库大小限制

我们建议存储库保持较小,理想情况下小于 1 GB,强烈建议小于 5 GB。较小的存储库克隆速度更快,并且更易于使用和维护。如果您的存储库过度影响我们的基础设施,您可能会收到来自 GitHub 支持团队的电子邮件,要求您采取纠正措施。我们尽量灵活,尤其是在拥有众多协作者的大型项目中,并且会尽力与您合作找到解决方案。您可以通过有效管理存储库的大小和整体健康状况来防止您的存储库影响我们的基础设施。您可以在 github/git-sizer 存储库中找到有关存储库分析的建议和工具。

外部依赖项会导致 Git 存储库变得非常大。为了避免存储库中充斥着外部依赖项,我们建议您使用包管理器。常用语言的流行包管理器包括 BundlerNode 的包管理器Maven。这些包管理器支持直接使用 Git 存储库,因此您无需预打包的源代码。

Git 并非旨在用作备份工具。但是,有许多专门设计用于执行备份的解决方案,例如 ArqCarboniteCrashPlan

从存储库的历史记录中删除文件

警告

这些过程将永久从您计算机和 GitHub.com 上的存储库中删除文件。如果文件很重要,请在存储库外部的目录中创建本地备份副本。

删除在最近未推送的提交中添加的文件

如果文件是使用您最近的提交添加的,并且您尚未推送到 GitHub.com,则可以删除该文件并修改提交

  1. 打开 终端终端Git Bash

  2. 将当前工作目录更改为您的本地存储库。

  3. 要删除文件,请输入 git rm --cached

    $ git rm --cached GIANT_FILE
    # Stage our giant file for removal, but leave it on disk
    
  4. 使用 --amend -CHEAD 提交此更改

    $ git commit --amend -CHEAD
    # Amend the previous commit with your change
    # Simply making a new commit won't work, as you need
    # to remove the file from the unpushed history as well
    
  5. 将您的提交推送到 GitHub.com

    $ git push
    # Push our rewritten, smaller commit
    

删除在较早提交中添加的文件

如果您在较早的提交中添加了文件,则需要将其从存储库的历史记录中删除。要从存储库的历史记录中删除文件,您可以使用 BFG Repo-Cleaner 或 git filter-repo 命令。有关更多信息,请参阅“从存储库中删除敏感数据”。

分发大型二进制文件

如果您需要在存储库中分发大型文件,则可以在 GitHub.com 上创建发布版。发布版允许您打包软件、发行说明以及指向二进制文件的链接,供其他人使用。有关更多信息,请访问“关于发布版”。

我们不限制发布版中二进制文件的总大小或用于传递它们的带宽。但是,每个单独的文件必须小于 2 GiB。