GitLab已删除项目/群组仍显示在列表中如何彻底移除
GitLab 14.6.1 自托管实例残留项目/群组彻底删除方案
你遇到的是GitLab 14.x版本常见问题:前台触发删除后Sidekiq异步任务卡队列、或者实例开启了删除保护/延迟删除,导致项目标记为删除态但一直没完成清理,所有关联用户的列表都会刷出残留条目,按下面步骤操作即可彻底清理:
- 先做前置校验排查配置问题
- 登录所有者账号,进入残留项目的Settings > General > Visibility, project features, permissions页面,拉到最底部关闭
Project deletion protection开关,保存配置。 - 如果项目归属某个群组,进入对应群组的Settings > General > Permissions and group features页面,取消勾选
Prevent project deletion选项,保存配置。 - 用管理员账号进入后台Admin Area > Settings > General > Visibility and access controls,查看
Default delayed project deletion设置,如果开启了延迟删除,可直接进入Admin Area > Projects > Pending deletion列表,找到对应残留项目点选Delete immediately跳过等待期。
- 登录所有者账号,进入残留项目的Settings > General > Visibility, project features, permissions页面,拉到最底部关闭
- 前台操作无效时,用Rails控制台执行硬删除(14.6.1 omnibus版本验证可用)
操作前必须先执行全量备份,避免误操作损坏实例数据
- 登录部署GitLab的Ubuntu 20.04服务器,切换root权限后进入Rails控制台:
sudo gitlab-backup create # 执行实例全量备份 sudo gitlab-rails console - 定位残留项目,将命令中的路径替换为你的项目实际全路径(比如群组为demo、项目名为test,路径就是
demo/test):# 查找目标残留项目 project = Project.find_by_full_path('替换为你的项目全路径') # 匹配到项目对象后直接执行硬删除 if project ProjectDestroyWorker.new.perform(project.id, project.creator_id, {}) end - 如果是残留的空群组,执行下面的命令定位并删除,替换为实际群组路径:
group = Group.find_by_full_path('替换为你的群组全路径') if group Groups::DestroyService.new(group.owner, {}).execute(group) end - 退出Rails控制台,执行命令清理缓存、重启异常的Sidekiq服务:
sudo gitlab-rake cache:clear sudo gitlab-ctl restart sidekiq
- 登录部署GitLab的Ubuntu 20.04服务器,切换root权限后进入Rails控制台:
- 校验清理结果
操作完成后等待3-5分钟,所有关联账号强制刷新页面(Ctrl+F5)即可看到残留条目消失;如果还有个别账号能看到条目,让对应账号退出重登即可清掉本地会话缓存。
内容的提问来源于stack exchange,提问作者foad322
相关产品推荐
相关产品推荐

