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 IconConsultation ExpressShooting Stars Icon

Bénéficie d'une heure de consultation dédiée avec François pour résoudre tes défis informatiques et stratégiques. Que ce soit pour la migration vers des technologies libres, la sécurisation de tes systèmes, la documentation de tes procédures, la conception de petits systèmes ou l'automatisation de tâches, cette session intensive t'offre des solutions concrètes et un plan d'action clair.

Tu seras libre ensuite de poursuivre avec un forfait de consultation sur mesure ou les programmes DéconstruIT ou Pleine Confiance

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

Étiquettes