跳至主要内容

关于 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。