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

项目故障排除

在使用项目时,你可能会遇到以下问题,或者需要使用其他方法来完成特定任务。

获取提交数据时发生错误

当你访问项目时,如果浏览器使用了广告拦截器,可能会显示 获取提交数据时发生错误 的消息。解决方案是为你要访问的 GitLab 实例禁用广告拦截器。

使用 SQL 查询查找项目

Rails 控制台会话 中,你可以根据 SQL 查询查找并存储一个项目数组:

# 查找以 '%ject' 结尾的项目
projects = Project.find_by_sql("SELECT * FROM projects WHERE name LIKE '%ject'")
=> [#<Project id:12 root/my-first-project>>, #<Project id:13 root/my-second-project>>]

清除项目或仓库的缓存

如果项目或仓库已更新但状态未在 UI 中反映,你可能需要清除项目或仓库的缓存。你可以通过 Rails 控制台会话 和以下方法之一来实现:

更改数据的命令如果未正确运行或在适当条件下运行,可能会造成损害。始终先在测试环境中运行命令,并准备好备份实例以进行恢复。

## 清除项目缓存
ProjectCacheWorker.perform_async(project.id)

## 清除仓库 .exists? 缓存
project.repository.expire_exists_cache

查找待删除的项目

如果你需要查找所有标记为删除但尚未删除的项目,启动 Rails 控制台会话 并运行以下命令:

projects = Project.where(pending_delete: true)
projects.each do |p|
  puts "项目 ID: #{p.id}"
  puts "项目名称: #{p.name}"
  puts "仓库路径: #{p.repository.full_path}"
end

使用控制台转移项目

如果通过 UI 或 API 转移项目不起作用,你可以尝试在 Rails 控制台会话 中进行转移。

p = Project.find_by_full_path('<project_path>')

# 设置项目所有者
current_user = p.creator

# 你想要移动到的命名空间
namespace = Namespace.find_by_full_path("<new_namespace>")

Projects::TransferService.new(p, current_user).execute(namespace)

使用控制台删除项目

如果项目无法删除,你可以尝试通过 Rails 控制台 删除它。

更改数据的命令如果未正确运行或在适当条件下运行,可能会造成损害。始终先在测试环境中运行命令,并准备好备份实例以进行恢复。

project = Project.find_by_full_path('<project_path>')
user = User.find_by_username('<username>')
Projects::DestroyService.new(project, user, {}).execute

如果这不起作用,使用以下命令显示为什么它不起作用:

project = Project.find_by_full_path('<project_path>')
project.delete_error

为组内的所有项目切换功能

虽然可以通过 projects API 切换项目中的功能,但你可能需要对大量项目执行此操作。

要切换特定功能,你可以 启动 Rails 控制台会话 并运行以下函数:

更改数据的命令如果未正确运行或在适当条件下运行,可能会造成损害。始终先在测试环境中运行命令,并准备好备份实例以进行恢复。

projects = Group.find_by_name('_group_name').projects
projects.each do |p|
  ## 在所有实例中将 <feature-name> 替换为适当的功能名称
  state = p.<feature-name>

  if state != 0
    puts "#{p.name} 已经启用了 <feature-name>。跳过..."
  else
    puts "#{p.name} 没有启用 <feature-name>。正在启用..."
    p.project_feature.update!(<feature-name>: ProjectFeature::PRIVATE)
  end
end

要查找可以切换的功能,运行 pp p.project_feature。可用的权限级别列在 concerns/featurable.rb 中。