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

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

【问题讨论】:

    标签: git gitlab gitlab-api


    【解决方案1】:

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

    您可以使用GitLab clientAPI 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()
    

    {yourUserId}{yourToken} 替换为对应的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】:
    1. 进入项目页面
    2. 选择“设置”
    3. 如果您在页面底部有足够的权限,那么将是一个按钮 “危险设置”(即可能导致数据丢失的项目设置)或 “删除项目”(在较新的 GitLab 版本中)
    4. 按此按钮并按照说明进行操作

    【讨论】:

    • 我想删除所有非单个 repo。
    • 您知道 gitlab 项目和项目中的存储库之间存在差异吗?
    猜你喜欢
    • 2019-02-07
    • 2015-08-31
    • 2021-12-30
    • 2011-06-04
    • 2015-09-18
    • 1970-01-01
    • 2021-08-24
    • 1970-01-01
    • 2015-07-24
    相关资源
    最近更新 更多