如何删除所有 Gitlab 存储库?

Posted

技术标签:

【中文标题】如何删除所有 Gitlab 存储库?【英文标题】:How to remove all Gitlab repository? 【发布时间】:2018-06-11 21:44:26 【问题描述】:

我在 GitLab 中创建了多个存储库。现在我想一次删除或删除所有存储库。我怎样才能做到这一点?有可用的 API 吗?

【问题讨论】:

【参考方案1】:

首先你list all projects,获取一个ID列表并循环遍历列表:对于你remove the project的每个项目ID。

您可以使用GitLab client(API wrapper),它们几乎适用于任何语言。

【讨论】:

一次只能获取 20 个 repo。是否有任何 API 可以一次获取所有内容? 我不这么认为。一些组织有很多 repos,Gitlab 不希望请求过多。 您知道 gitlab 项目和项目中的存储库之间存在差异吗?【参考方案2】:

我使用 Gitlab 的 API 列出并删除了我错误迁移的大量项目,我为它制作了一个小 Python 脚本。

免责声明:使用以下代码时要非常小心。仔细阅读代码。您独自对自己的结果负全部责任。

话虽如此,这里是:

import requests
import json

def get_project_ids():

    url = "https://gitlab.example.com/api/v4/users/yourUserId/projects"

    querystring = "owned":"true","simple":"true","per_page":"50"

    payload = ""
    headers = 'authorization': 'Bearer yourToken'

    response = requests.request("GET", url, data=payload, headers=headers, params=querystring)

    projects = json.loads(response.text)
    projects_ids = list(map(lambda project: project.get('id'), projects))

    return projects_ids


def remove_project(project_id):
    url_temp = "https://gitlab.example.com/api/v4/projects/project"
    headers = 'authorization': 'Bearer yourToken'
    querystring = ""
    payload = ""

    url = url_temp.format(project=project_id)

    response = requests.request("DELETE", url, data=payload, headers=headers, params=querystring)
    project = json.loads(response.text)
    print(project)


def main():
    projects_ids = get_project_ids()

    url_temp = "https://gitlab.example.com/api/v4/projects/project"
    headers = 'authorization': 'Bearer yourToken'
    querystring = ""
    payload = ""

    for project_id in projects_ids:

        url = url_temp.format(project=project_id)

        response = requests.request("GET", url, data=payload, headers=headers, params=querystring)
        project = json.loads(response.text)
        print(str(project.get('id')) + " " + project.get('name'))
        print("Removing")
        # remove_project(project_id)


if __name__ == "__main__":
    main()

yourUserIdyourToken 替换为对应的info。取消注释 remove_project() 功能以删除项目,同样我不会以任何方式对上述代码负责。

【讨论】:

电击。以数百个 gitlab 项目为例。【参考方案3】:

首先你需要创建一个个人访问令牌:

转到profile/preferences/access tokens 或只是click here

在下面的代码中将您的令牌替换为token 变量:

const axios = require("axios");

// Your authorization token here
const token = "YOUR_ACCESS_TOKEN";

// fetch all projects
axios
  .get("https://gitlab.com/api/v4/projects?visibility=private", 
    headers: 
      Authorization: `Bearer $token`,
    ,
  )
  .then(async function (response) 
    // get all projects IDs
    let ids = response.data.map((e) => e.id);
    // delete all
    for (let el of ids) 
      await axios.delete(`https://gitlab.com/api/v4/projects/$el/`, 
        headers: 
          Authorization: `Bearer $token`,
        ,
      );
    
  )
  .catch(function (error) 
    // handle error
    console.log(error);
  );

您可以更改可见性?visibility=private?visibility=public

【讨论】:

这就像一个魅力【参考方案4】:
    进入项目页面 选择“设置” 如果您在页面底部有足够的权限,那么将是一个按钮 “危险设置”(即可能导致数据丢失的项目设置)或 “删除项目”(在较新的 GitLab 版本中) 按此按钮并按照说明进行操作

【讨论】:

我想删除所有非单个 repo。 您知道 gitlab 项目和项目中的存储库之间存在差异吗?

以上是关于如何删除所有 Gitlab 存储库?的主要内容,如果未能解决你的问题,请参考以下文章

如何重置/清理 GitLab 存储库

如何从 gitlab 中完全删除提交?

Gitlab如何删除一个库

如何列出过去已删除的 Fossil 存储库的所有文件?

如何从远程存储库中取消提交所有文件

如何列出存储库中的所有提交及其父信息以及使用命令行或 JGit 添加和删除的行?