{{< details >}}

  • Tier: 基础版, 专业版, 旗舰版
  • Offering: JihuLab.com, 私有化部署

{{< /details >}}

极狐 GitLab 仓库的大小会显著影响性能和存储成本。由于压缩、维护和其他因素,它在不同实例之间可能略有不同。

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

清除仓库历史中的文件

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

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

前提条件:

  • 您必须安装 git filter-repo
  • 可选。安装 git-sizer

{{< alert type=”warning” >}}

清除文件是一个破坏性操作。在继续之前,请确保您有仓库的备份。

{{< /alert >}}

要从极狐 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
      
  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 引用

    {{< alert type=”note” >}}

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

    {{< /alert >}}

  11. 等待至少 30 分钟再进行下一步。
  12. 运行 清理仓库 过程。此过程只清理超过 30 分钟的对象。有关更多信息,请参阅 清理后空间未释放