Skip to content

  • 体验新版
    • 正在加载...
  • 登录
  • GitCode
  • 帮助文档帮助文档
  • Wiki
    • Docs
    • User
    • Project
    • Repo
  • reduce repo size

帮助文档
帮助文档
  • 项目概览

GitCode / 帮助文档

通知 1799
Star 580
Fork 457
  • 代码
    • 文件
    • 提交
    • 分支
    • Tags
    • 贡献者
    • 分支图
    • Diff
  • Issue 44
    • 列表
    • 看板
    • 标记
    • 里程碑
  • 合并请求 1
  • DevOps
    • 流水线
    • 流水线任务
    • 计划
  • Wiki 89
    • Wiki
  • 分析
    • 仓库
    • DevOps
  • 代码片段
  • 项目成员
  • Pages
帮助文档
帮助文档
  • 项目概览
    • 项目概览
    • 详情
    • 发布
  • 仓库
    • 仓库
    • 文件
    • 提交
    • 分支
    • 标签
    • 贡献者
    • 分支图
    • 比较
  • Issue 44
    • Issue 44
    • 列表
    • 看板
    • 标记
    • 里程碑
  • 合并请求 1
    • 合并请求 1
  • Pages
  • DevOps
    • DevOps
    • 流水线
    • 流水线任务
    • 计划
  • 分析
    • 分析
    • 仓库分析
    • DevOps
  • Wiki 89
    • Wiki
  • 代码片段
    • 代码片段
  • 成员
    • 成员
  • 收起侧边栏
  • 动态
  • 分支图
  • 创建新Issue
  • 流水线任务
  • 提交
  • Issue看板

reduce repo size

最后修改来自于熊佳牧 10月 22, 2020
页面历史

减少仓库大小

代码仓库会随着时间变得越来越大,将大文件加到 Git 代码仓库后:

  • 由于每个人都必须下载文件,因此获取存储库的速度变慢
  • 它们占用服务器上的大量存储空间
  • 会达到 Git 仓库的存储限制

重写代码仓库可能会删除不需要的历史记录,从而使代码仓库变得更小。git filter-repo是用于快速重写 Git 存储库历史记录的工具,建议同时使用以下两种工具:

  • git filter-branch.
  • BFG.

**危险:**重写代码仓库历史记录是一种破坏性操作,在开始之前,请确保备份您的代码仓库。备份存储库的最佳方法是导出项目 。

在从代码仓库历史记录中净化文件

为了使克隆项目更快,建议重写分支和标签以删除不需要的文件。

  1. 使用受支持的程序包管理器或从源代码安装git filter-repo

  2. 使用--bare克隆代码仓库的新副本:

    git clone --bare https://example.gitlab.com/my/project.git 
  3. 使用git filter-repo ,从代码仓库的历史记录中清除所有文件

    要清除大文件,可以使用--strip-blobs-bigger-than选项:

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

    要清除使用 Git LFS 存储的大文件,可以使用--blob--callback选项. 下面的示例使用回调从 Git LFS 指针读取文件大小,并删除大于 10MB 的文件

    git filter-repo --blob-callback '
      if blob.data.startswith(b"version https://git-lfs.github.com/spec/v1"):
        size_in_bytes = int.from_bytes(blob.data[124:], byteorder="big")
        if size_in_bytes > 10*1000:
          blob.skip()
      ' 

    要按路径清除特定的大文件,可以组合使用--path和--invert-paths选项:

    git filter-repo --path path/to/big/file.m4v --invert-paths 

    有关更多示例和完整文档,请参见git filter-repo文档。

  4. 运行git filter-repo会删除所有 remote,要为您的项目还原 remote,请运行:

    git remote add origin https://codechina.csdn.net/<namespace>/<project_name>.git 
  5. 强制推送更改以覆盖 CODE CHINA 上的所有分支:

    git push origin --force --all 

    受保护的分支将导致此操作失败。要继续的话,您必须删除分支保护,推送,然后重新启用受保护的分支。

  6. 要从标记的 Release 中删除大文件,请强制将更改推送到CODE CHINA上的所有标记:

    git push origin --force --tags 

    受保护的标签将导致此操作失败. 要继续,您必须删除标签保护,推送,然后重新启用受保护的标签.

  7. 手动执行项目整理

**注意:**为提高性能我们缓存了项目统计信息,您可能需要等待 5 到 10 分钟才能看到存储利用率下降。

在代码仓库中净化文件

要减少代码仓库的大小,必须删除 CODE CHINA 内部引用包含大文件的提交。在完成这些步骤之前,请从存储库历史记录中清除文件 .

除了分支和标签(这是一种 Git 引用)之外,系统还会自动创建其他引用,代码仓库清理可用于从 CODE CHINA 中删除它们.

以下为内部参考文献:

  • refs/merge-requests/*用于合并请求
  • refs/pipelines/* 用于 pipelines
  • refs/environments/*用于环境

这意味着在获取时通常不包含它们,这使得获取速度更快。另外, refs/keep-around/*是隐藏的 refs,以防止与讨论相关的提交被删除并且根本无法被获取。但是,可以从项目导出内的 Git 捆绑包访问这些引用:

  1. 使用受支持的程序包管理器或从源代码安装git filter-repo

  2. 从项目中生成一个新的导出并下载

  3. 使用tar解压缩备份:

    tar xzf project-backup.tar.gz 

    这将包含一个由git bundle创建的project.bundle文件

  4. 从包中克隆存储库的新副本:

    git clone --bare --mirror /path/to/project.bundle 
  5. 使用git filter-repo ,从代码仓库的历史记录中清除所有文件。因为我们正在尝试删除内部引用,所以我们将依靠每次运行生成的commit-map来告诉我们要删除哪些内部引用。

    注意: git filter-repo每次运行都会创建一个新的commit-map文件,并覆盖前一次运行的commit-map

    每次运行都将需要此文件,每次运行git filter-repo都要执行下一步

    要清除所有大文件,可以使用--strip-blobs-bigger-than选项:

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

    要按路径清除特定的大文件,可以组合使用--path和--invert-paths选项

    git filter-repo --path path/to/big/file.m4v --invert-paths 

    有关更多示例和完整文档,请参见git filter-repo文档

  6. 运行代码仓库清理

代码仓库清理

代码仓库清理允许您上传对象的文本文件,并且 CODE CHINA 将删除对这些对象的内部 Git 引用。您可以使用git filter-repo生成对象列表(在commit-map文件中),该对象列表可与存储库清理一起使用。

要清理代码仓库:

  1. 转到项目的代码仓库
  2. 进入 项目设置>仓库>仓库清理
  3. 上载对象列表,例如,一个commit-map文件
  4. 点击开始清理

这将:

  • 删除所有对旧提交的内部 Git 引用
  • 针对存储库运行git gc

完成后,您将收到一封电子邮件。

当在使用代码仓库清理时,需要注意:

  • 项目统计信息已缓存,您可能需要等待 5 到 10 分钟才能看到存储利用率下降
  • Housekeeping 会精简2周以上的松散物品,这意味着在最近 2 周内添加的对象将不会被立即删除
  • 此过程将从 CODE CHINA 的缓存和数据库中删除一些重写提交的副本,但是覆盖范围仍然存在许多空白,并且某些副本可能会无限期地存在

仓库大小限制

仓库大小限制由管理员在实例上设置。

当项目达到其大小限制时,您不能:

  • 推送到项目
  • 创建一个新的合并请求
  • 合并现有的合并请求
  • 上载 LFS 对象

您仍然可以:

  • 创造新问题
  • 克隆项目

如果超出存储库大小限制,则可以尝试:

  1. 删除一些数据
  2. 进行新的提交
  3. 推回代码仓库

也许您还可以:

  • 将一些 blob 移到 LFS
  • 从历史记录中删除一些旧的依赖项更新

实际上,在提交中删除文件并不会减小存储库的大小,因为早期的提交和 Blob 仍然存在。

您需要做的是重写历史记录,我们建议使用开源社区维护的工具git filter-repo

克隆仓库

快速访问

  • 首页
  • 组织
    • 子组织
    • 申请入驻
  • 项目
    • 徽章
    • 批量编辑
    • 新建项目
    • 描述模板
    • 文件查找
    • 合并请求
      • 允许协作
      • 创建合并请求
      • Cherry-pick
      • 快进合并
      • 解决冲突
      • 还原
      • 评审及管理
      • Squash合并
      • 合并请求版本
      • 草稿
    • 项目成员
    • 导入
      • Github
      • URL
    • Releases
    • 代码仓库
      • 分支
      • Git属性
      • Blame
      • 文件历史记录
      • 仓库镜像
      • 保护分支
      • 保护Tag
      • Git LFS
      • 减少仓库大小
      • GPG签名提交
      • 文件编辑
      • WebIDE
    • 项目设置
    • 与群组共享项目
    • wiki
    • 代码片
    • Pages
      • Hugo
      • Mdbook
      • html
  • Issues
    • 机密Issue
    • 关联Issue
    • 截止日期
    • 看板
    • 操作Issue
    • 标签
    • 管理Issue
    • 里程碑
    • Issue排序
  • API
    • Runners Api
  • CI / CD
    • Pipelines
      • 流水线计划
      • 设置
    • 变量
    • Runners
    • .codechina-ci.yml
      • .codechina-ci.yml 参考
      • 语法验证
  • 用户
    • 举报用户
    • 用户账号
      • 登录日志
      • 用户权限
      • 个人访问令牌
      • 个人偏好
    • Notebook
    • 探讨
    • SSH密钥
    • 快捷键
    • Markdown
    • 电子邮件通知
    • 快速操作
      • 自动填充
    • 预留命名空间
    • 搜索
    • 时间跟踪
    • 待办事项
渝ICP备2023009037号

京公网安备11010502055752号

网络110报警服务 Powered by GitLab CE v13.7
开源知识
Git 入门 Pro Git 电子书 在线学 Git
Markdown 基础入门 IT 技术知识开源图谱
帮助
使用手册 反馈建议 博客
《GitCode 隐私声明》 《GitCode 服务条款》 关于GitCode
Powered by GitLab CE v13.7