Как удалить все хранилище Gitlab?

Я создал несколько репозиториев в GitLab. Теперь я хочу удалить или удалить все репозитории одновременно. Как я могу это сделать? есть ли API?

5 ответов

Решение

Сначала вы перечисляете все проекты, получаете список идентификаторов и перебираете список: для каждого идентификатора проекта вы удаляете проект.

Вы можете использовать клиент GitLab ( API-оболочку), они существуют практически для любого языка.

Я использовал API Gitlab для составления списка и удаления большого количества проектов, которые я перенес по ошибке, я сделал для него небольшой скрипт на 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}с соответствующей информацией. Раскомментируйтеremove_project() функция удаления проектов, я не буду нести никакой ответственности за приведенный выше код.

  1. Перейти на страницу проекта
  2. Выберите "Настройки". 3. Если у вас достаточно прав в нижней части страницы, будет кнопка "Опасные настройки" (т.е. настройки проекта, которые могут привести к потере данных) или "Удалить проект" (в более новых версиях GitLab). 4 Нажмите эту кнопку и следуйте инструкциям

Прежде всего вам необходимо создать личный токен доступа:

Перейти к profile/ preferences/ access tokensили просто нажмите здесьальтернативный текст

Замените свой токен в 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

"Он будет получать только 20 репо за раз. Есть ли какой-нибудь API, чтобы получить все сразу?"

добавьте этот параметр в свой запрос per_page, как показано ниже https://gitlab.com/api/v4/groups/<group_id> / projects?per_page=

Другие вопросы по тегам