Help us learn about your current experience with the documentation. Take the survey.

减小仓库大小

  • Tier: Free, Premium, Ultimate
  • Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated

Git 仓库的大小会显著影响性能和存储成本。 由于压缩、清理维护和其他因素,不同实例的仓库大小可能会有轻微差异。

有关仓库大小的更多信息,请参阅:

从仓库历史中清除文件

使用此方法从整个 Git 历史记录中移除大文件。

此方法不适合从仓库中移除密码或密钥等敏感数据。 提交信息(包括文件内容)会被缓存在数据库中,即使从仓库中移除后仍然可见。 要移除敏感数据,请使用 Remove blobs 中描述的方法。

先决条件:

清除文件是破坏性操作。在继续操作前,请确保已备份仓库。

要从 GitLab 仓库中清除文件:

  1. 导出项目,该项目包含您的仓库副本,然后下载它。

  2. 解压并提取备份:

    tar xzf project-backup.tar.gz
  3. 使用 --bare--mirror 选项克隆仓库:

    git clone --bare --mirror /path/to/project.bundle
  4. 进入 project.git 目录:

    cd project.git
  5. 更新远程 URL:

    git remote set-url origin https://gitlab.example.com/<namespace>/<project_name>.git
  6. 使用 git filter-repogit-sizer 分析仓库:

    • git filter-repo:

      git filter-repo --analyze
      head filter-repo/analysis/*-{all,deleted}-sizes.txt
    • git-sizer:

      git-sizer
  7. 使用以下 git filter-repo 选项之一清除您的仓库历史:

    • --path--invert-paths 用于清除特定文件:

      git filter-repo --path path/to/file.ext --invert-paths
    • --strip-blobs-bigger-than 用于清除所有大于例如 10M 的文件:

      git filter-repo --strip-blobs-bigger-than 10M

    更多示例,请参阅 git filter-repo 文档

  8. 备份 commit-map

    cp filter-repo/commit-map ./_filter_repo_commit_map_$(date +%s)
  9. 取消设置镜像标志:

     git config --unset remote.origin.mirror
  10. 强制推送更改:

    git push origin --force 'refs/heads/*'
    git push origin --force 'refs/tags/*'
    git push origin --force 'refs/replace/*'

    有关引用的更多信息,请参阅 Gitaly 使用的 Git 引用。

    此步骤对 受保护的分支受保护的标签 会失败。要继续,请暂时移除保护。

  11. 在下一步之前等待至少 30 分钟。

  12. 运行 清理仓库 过程。 此过程只清理超过 30 分钟的对象。 更多信息,请参阅 清理后空间未释放