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 :
- Avoir Python installé avec les bibliothèques
requests,pandas,subprocessetos. - Obtenir des jetons API pour Gitea et GitLab.
- Créer deux groupes dans GitLab :
personnel(namespace_id: 4) pour les dépôts privés etpartage(namespace_id: 5) pour les publics.
🌘 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.