Potion Bottle Icon Manuel d'alchimie du code Potion Bottle Icon

Migration de répertoires de travail de Gitea vers GitLab

- 284 mots - Temps de lecture estimé: 2 minutes

Ce tutoriel détaille un script Python pour migrer des dépôts de Gitea vers GitLab. Il couvre l’extraction des dépôts, leur clonage, la création dans GitLab et la poussée finale.

🌘 Prérequis

Avant d’exécuter le script, assurez-vous de :

🌘 Chargement des librairies de code Python requises pour ce projet

import requests
import pandas
import subprocess
import os

🌘 Configuration des jetons API pour Gitea et GitLab

Remplacez les chaînes vides par vos jetons API réels.

gitea_token = ""
gitlab_token = ""

🌘 Configuration du répertoire de travail

Créez un répertoire pour stocker les dépôts clonés.

os.mkdir("./git_repos")
os.chdir("./git_repos")

Vérifiez le répertoire actuel :

os.getcwd()

🌘 Extraction des répertoires à déménager et de leur statut public ou privé

Définissez la page à extraire (Gitea pagine les résultats par 30).

page = 1

Récupérez les dépôts via l’API Gitea :

repos = requests.get('https://utilisateur:' + gitea_token + '@apps.mondomaine.com/gitea/api/v1/user/repos?page=' + str(page))

Convertissez la réponse en DataFrame pandas :

repos_data = pandas.read_json(repos.content)

Extrayez les colonnes pertinentes :

urls = repos_data[['name', 'clone_url', 'private']]

🌘 Clone des répertoires de Gitea vers le répertoire de travail

Modifiez les URLs pour inclure l’authentification :

urls.loc[:, "fixed_url"] = [myurl.replace("https://", "https://utilisateur:" + gitea_token + "@") for myurl in urls.clone_url]

Clonez chaque dépôt en mode bare :

for i in urls.fixed_url:
    print(i)
    subprocess.run(['git', 'clone', '--bare', i])

🌘 Création des nouveaux répertoires dans GitLab via API

Créez les dépôts dans GitLab en fonction de leur visibilité :

for index, row in urls.iterrows():
    print(row['name'] + '.git')
    if row['private']:
        new_repo = requests.post('https://git.mondomaine.com/api/v4/projects', data={"private_token": gitlab_token, "name": row['name'], "namespace_id": 4})
    else:
        new_repo = requests.post('https://git.mondomaine.com/api/v4/projects', data={"private_token": gitlab_token, "name": row['name'], "namespace_id": 5})
    print(str(new_repo.status_code) + ': ' + new_repo.reason)

🌘 Pousser les nouveaux répertoires vers GitLab avec git push

Poussez les dépôts vers GitLab en utilisant l’option mirror :

for index, row in urls.iterrows():
    if row['private']:
        remote_url = 'https://oauth2:' + gitlab_token + '@git.mondomaine.com/personnel/' + row['name'] + '.git'
    else:
        remote_url = 'https://oauth2:' + gitlab_token + '@git.mondomaine.com/partage/' + row['name'] + '.git'
    print(remote_url)
    os.chdir("./" + row['name'] + '.git')
    subprocess.run(['git', 'push', '--mirror', remote_url])
    os.chdir("../")

Une fois exécuté, tous vos dépôts seront migrés vers GitLab dans les groupes appropriés.

Shooting Stars IconConfiguration ExpressShooting Stars Icon

Bénéficie d'une heure de consultation pour la configuration de tes outils de travail et de communications. Cette session intensive t'offre des solutions concrètes et un plan d'action clair.

Découvre la Configuration Express.
Abonne-toi au fil RSS pour ne rien manquer.

Étiquettes