跳至主要内容

关于 GitHub 上的大文件

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

平台导航

关于 GitHub 上的大小限制

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

文件大小限制

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

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

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

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

如果您需要在仓库中分发大型文件,您可以创建 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。