{"meta":{"title":"关于 GitHub 上的大文件","intro":"GitHub 限制可以在常规 Git 存储库中跟踪的文件大小。 了解如何跟踪或删除超出限制的文件。","product":"存储库","breadcrumbs":[{"href":"/zh/repositories","title":"存储库"},{"href":"/zh/repositories/working-with-files","title":"处理文件"},{"href":"/zh/repositories/working-with-files/managing-large-files","title":"管理大型文件"},{"href":"/zh/repositories/working-with-files/managing-large-files/about-large-files-on-github","title":"大型文件"}],"documentType":"article"},"body":"# 关于 GitHub 上的大文件\n\nGitHub 限制可以在常规 Git 存储库中跟踪的文件大小。 了解如何跟踪或删除超出限制的文件。\n\n## 关于 GitHub 的大小限制\n\nGitHub 试图为所有 Git 存储库提供丰富的存储，尽管对文件和 存储库大小\n提出了建议。\n为了确保用户的性能和可靠性，我们积极监视整个存储库运行状况的信号。 存储库运行状况是各种交互因素的函数，包括大小、提交频率、内容和结构。\n\n### 文件大小限制\n\nGitHub 限制存储库中允许的文件的大小。 如果尝试添加或更新大于 50 MiB的文件，将收到来自 Git 的警告。 更改仍将成功推送到仓库，但您可以考虑删除提交，以尽量减少对性能的影响。 有关详细信息，请参阅[从存储库的历史记录中移除文件](#removing-files-from-a-repositorys-history)。\n\n> \\[!NOTE]\n> 如果通过浏览器将文件添加到存储库，则该文件不能大于 25 MiB。 有关详细信息，请参阅“[添加文件到仓库](/zh/repositories/working-with-files/managing-files/adding-a-file-to-a-repository)”。\n\nGitHub阻止大于 100 MiB. 的文件。\n\n若要跟踪超出此限制的文件，必须使用 Git 大型文件存储 （Git LFS）。 有关详细信息，请参阅“[关于 Git 大文件存储系统](/zh/repositories/working-with-files/managing-large-files/about-git-large-file-storage)”。\n\n如果你需要在存储库内分发大文件，可以在 GitHub.com 上创建版本，而不是跟踪这些文件。 有关详细信息，请参阅[分发大型二进制文件](#distributing-large-binaries)。\n\nGit 不是为处理大型 SQL 文件而设计的。 要与其他开发人员共享大型数据库，建议使用文件共享服务。\n\n### 存储库大小限制\n\n建议仓库保持较小，理想情况下小于 1 GB，强烈建议小于 5 GB。 较小的仓库克隆速度更快，使用和维护更容易。 如果存储库过度影响我们的基础结构，你可能会收到一封电子邮件， GitHub 支持 要求你采取纠正措施。 我们力求灵活，特别是对于拥有很多协作者的大型项目，并且尽可能与您一起找到解决方案。 您可以有效地管理仓库的大小和整体运行状况，以免您的仓库影响我们的基础架构。 可以在 [`github/git-sizer`](https://github.com/github/git-sizer) 存储库中找到用于存储库分析的建议和工具。\n\n外部依赖项可能导致 Git 仓库变得非常大。 为避免外部依赖项填满仓库，建议您使用包管理器。 常见语言的常用包管理器包括 [Bundler](http://bundler.io/)、[Node 的包管理器](http://npmjs.org/)和 [Maven](https://maven.apache.org/)。 这些包管理器支持直接使用 Git 仓库，因此不需要预打包的来源。\n\nGit 未设计为用作备份工具。 但是，有许多专门为执行备份而设计的解决方案，例如 [Arq](https://www.arqbackup.com/)、[Carbonite](http://www.carbonite.com/) 和 [CrashPlan](https://www.crashplan.com/en-us/)。\n\n## 从仓库的历史记录中删除文件\n\n> \\[!WARNING]\n> 这些过程将从你的计算机和 GitHub.com 上的存储库中永久删除文件。 如果文件很重要，请在仓库外部的目录中创建本地备份副本。\n\n### 删除在最近未推送的提交中添加的文件\n\n如果文件是在最近的一次提交中添加的，且尚未推送到 GitHub.com，则可以删除该文件并修改提交：\n\n1. 打开<span class=\"platform-mac\">终端</span><span class=\"platform-linux\">终端</span><span class=\"platform-windows\">Git Bash</span>。\n\n2. 将当前工作目录更改为您的本地仓库。\n\n3. 要删除文件，请输入 `git rm --cached`：\n\n   ```shell\n   $ git rm --cached GIANT_FILE\n   # Stage our giant file for removal, but leave it on disk\n   ```\n\n4. 使用 `--amend -CHEAD` 提交此更改：\n\n   ```shell\n   $ git commit --amend -CHEAD\n   # Amend the previous commit with your change\n   # Simply making a new commit won't work, as you need\n   # to remove the file from the unpushed history as well\n   ```\n\n5. 将提交推送到 GitHub.com：\n\n   ```shell\n   $ git push\n   # Push our rewritten, smaller commit\n   ```\n\n### 删除之前提交中添加的文件\n\n如果在之前的提交中添加了文件，则需要将其从仓库历史记录中删除。  要从仓库的历史记录中删除文件，建议使用 `git filter-repo` 命令。 有关详细信息，请参阅“[从存储库中删除敏感数据](/zh/authentication/keeping-your-account-and-data-secure/removing-sensitive-data-from-a-repository)”。\n\n> 或者，如果你不想安装其他工具，可以使用交互式变基来删除有问题的提交。 要执行此操作：\n>\n> * 必须知道哪些提交对相关文件进行了添加或修改。\n> * 这些提交必须仅属于一个分支。\n> * 这些提交所属的这个分支在应用这些提交后不能有任何合并操作。\n>\n> 有关交互式变基的详细信息，请参阅“[在命令行中使用 Git rebase](/zh/get-started/using-git/using-git-rebase-on-the-command-line)”。  如果不确定是否满足使用交互式变基进行修复的必要条件，则应使用 `git filter-repo`。\n\n## 分发大型二进制文件\n\n如果需要在存储库中分发大型文件，可以在 GitHub.com 中创建发布。 发行版允许您打包软件、发行说明和指向二进制文件的链接，以供其他人使用。 有关详细信息，请访问“[关于发行版](/zh/repositories/releasing-projects-on-github/about-releases)”。\n\n我们不限制二进制发行版文件的总大小，也不限制用于传递它们的带宽。 但是，每个单个文件必须小于计划的最大文件大小限制 Git LFS 。 请参阅“[关于 Git 大文件存储系统](/zh/repositories/working-with-files/managing-large-files/about-git-large-file-storage)”。"}