如何清理Agit集中式评审引入的大文件空间?

更新时间:
复制为 MD 格式

本文将介绍如何清理 Agit 集中式评审过程中引入的大文件空间,以优化存储和提高系统性能。

形成原因

  • 通过集中式评审创建的评审,源提交可能携带大文件。

  • 当评审未合入时,这些大文件不会存在于仓库的任何分支和标签中,但会存在于评审产生的特殊引用中(用于防止源提交被回收,参考git gc的原理)。因此,即使关闭评审并强制 GC,依然无法清理服务端仓库的大小。

解决办法

  1. 找到带入大文件的评审页面,若评审处于打开状态,请关闭;

  2. 找到评审产生的特殊引用,示意如下:

    本地创建评审信息尚在,直接获取特殊引用

    › git pr
    枚举对象中: 5, 完成.
    对象计数中: 100% (5/5), 完成.
    使用 8 个线程进行压缩
    压缩对象中: 100% (4/4), 完成.
    写入对象中: 100% (4/4), 5.50 MiB | 6.79 MiB/s, 完成.
    总共 4 (差异 0), 复用 0 (差异 0), 包复用 0
    remote: +-----------------------------------------------------------------------+
    remote: | Merge Request #1367177 was created or updated.                       |
    remote: | View merge request at URL:                                           |
    remote: | https://codeup.aliyun.com/xxx/xxx/xxx/xxx/merge_request/1367177 |
    remote: +-----------------------------------------------------------------------+
    To xxx.git
     * [new reference]   master -> refs/merge-requests/1367177/head

    命令行创建时反馈信息中,最后一行->右边的引用,就是评审产生的特殊引用:refs/merge-requests/1367177/head

    本地创建评审信息不在,通过页面查找评审 ID,拼接特殊引用

    在代码托管平台(云效 Codeup)中打开对应仓库的合并请求详情页面,查看浏览器地址栏中的 URL。

    当前页面地址merge_request后的数字,为评审ID,若评审ID:1367177。此时评审引用为:refs/merge-requests/1367177/head

    获取评审暂存引用

    在合并请求详情页面中,源分支区域可找到评审源的 commit ID(如 2a2d43d8)。

    单击评审源的commit ID,在commit详情页面点击复制commit ID。

    在这里是:2a2d43d8daa87b28e71067d5d0681a23c3ba5105,那么评审的暂存引用为:refs/keep-around/2a2d43d8daa87b28e71067d5d0681a23c3ba5105

  3. 通过命令行删除特殊引用:

    cd your_local_repository
    git push origin :refs/merge-requests/1367177/head
    git push origin :refs/keep-around/6349273477adaa3b9d18fea9033fe01f26656a1d
  4. 在仓库设置页面的存储空间管理,选择立即清理,清理策略选择立即删除