|
|
|
@ -1,10 +1,13 @@
|
|
|
|
|
# 🚀 Gitea to GitHub Migration Tool
|
|
|
|
|
# 🚀 Outil de Migration Git Multi-Providers
|
|
|
|
|
|
|
|
|
|
Ce projet fournit un outil pratique et modulable pour migrer vos repositories de Gitea vers GitHub automatiquement.
|
|
|
|
|
Cet projet fournit un outil pratique et modulable pour migrer automatiquement vos repositories entre différents providers Git.
|
|
|
|
|
|
|
|
|
|
## ✨ Fonctionnalités
|
|
|
|
|
|
|
|
|
|
- **Migration automatique** : Migre tous vos repositories Gitea vers GitHub en une seule commande
|
|
|
|
|
- **Migration multi-providers** : Supporte plusieurs providers source et destination
|
|
|
|
|
- **Providers supportés** :
|
|
|
|
|
- **Sources** : Gitea, GitLab
|
|
|
|
|
- **Destinations** : GitHub, GitLab
|
|
|
|
|
- **Mode interactif par défaut** : Interface élégante pour sélectionner/déselectionner les repos à migrer
|
|
|
|
|
- **Vision complète** : Voit tous les repositories accessibles (vos repos + ceux d'organisations)
|
|
|
|
|
- **Sélection intelligente** : Vos repositories sont pré-sélectionnés, les autres sont désélectionnés par défaut
|
|
|
|
@ -13,13 +16,14 @@ Ce projet fournit un outil pratique et modulable pour migrer vos repositories de
|
|
|
|
|
- **Interface en ligne de commande** : Interface colorée et intuitive avec navigation au clavier
|
|
|
|
|
- **Logging complet** : Suivi détaillé des opérations avec fichier de log
|
|
|
|
|
- **Gestion des erreurs** : Robuste avec gestion gracieuse des erreurs
|
|
|
|
|
- **Architecture extensible** : Facilement extensible pour ajouter de nouveaux providers
|
|
|
|
|
|
|
|
|
|
## 🛠 Installation
|
|
|
|
|
|
|
|
|
|
1. **Clonez le repository** :
|
|
|
|
|
```bash
|
|
|
|
|
git clone https://github.com/votre-username/GiteaToGithubMigrator.git
|
|
|
|
|
cd GiteaToGithubMigrator
|
|
|
|
|
git clone https://github.com/votre-username/GitMigrator.git
|
|
|
|
|
cd GitMigrator
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
2. **Configuration automatique** :
|
|
|
|
@ -32,19 +36,53 @@ Le script va automatiquement :
|
|
|
|
|
- Installer toutes les dépendances
|
|
|
|
|
- Créer le fichier de configuration `.env`
|
|
|
|
|
|
|
|
|
|
Cela créera un fichier `.env` que vous devrez remplir avec vos informations :
|
|
|
|
|
Cela créera un fichier `.env` que vous devrez remplir avec vos informations selon les providers choisis.
|
|
|
|
|
|
|
|
|
|
## 🔧 Configuration
|
|
|
|
|
|
|
|
|
|
### Configuration basique (Gitea → GitHub)
|
|
|
|
|
```env
|
|
|
|
|
# Gitea Configuration
|
|
|
|
|
# Source Provider
|
|
|
|
|
SOURCE_PROVIDER=gitea
|
|
|
|
|
GITEA_URL=https://votre-instance-gitea.com
|
|
|
|
|
GITEA_TOKEN=votre_token_gitea
|
|
|
|
|
GITEA_USERNAME=votre_nom_utilisateur_gitea
|
|
|
|
|
|
|
|
|
|
# GitHub Configuration
|
|
|
|
|
# Destination Provider
|
|
|
|
|
DESTINATION_PROVIDER=github
|
|
|
|
|
GITHUB_TOKEN=votre_token_github
|
|
|
|
|
GITHUB_USERNAME=votre_nom_utilisateur_github
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Configuration GitLab → GitHub
|
|
|
|
|
```env
|
|
|
|
|
# Source Provider
|
|
|
|
|
SOURCE_PROVIDER=gitlab
|
|
|
|
|
GITLAB_URL=https://gitlab.com
|
|
|
|
|
GITLAB_TOKEN=votre_token_gitlab
|
|
|
|
|
GITLAB_USERNAME=votre_nom_utilisateur_gitlab
|
|
|
|
|
|
|
|
|
|
# Destination Provider
|
|
|
|
|
DESTINATION_PROVIDER=github
|
|
|
|
|
GITHUB_TOKEN=votre_token_github
|
|
|
|
|
GITHUB_USERNAME=votre_nom_utilisateur_github
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Configuration GitLab → GitLab (migration entre instances)
|
|
|
|
|
```env
|
|
|
|
|
# Source Provider
|
|
|
|
|
SOURCE_PROVIDER=gitlab
|
|
|
|
|
GITLAB_URL=https://gitlab-source.com
|
|
|
|
|
GITLAB_TOKEN=votre_token_gitlab_source
|
|
|
|
|
GITLAB_USERNAME=votre_nom_utilisateur_source
|
|
|
|
|
|
|
|
|
|
# Destination Provider
|
|
|
|
|
DESTINATION_PROVIDER=gitlab
|
|
|
|
|
GITLAB_DEST_URL=https://gitlab-destination.com
|
|
|
|
|
GITLAB_DEST_TOKEN=votre_token_gitlab_dest
|
|
|
|
|
GITLAB_DEST_USERNAME=votre_nom_utilisateur_dest
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## 🔑 Configuration des tokens
|
|
|
|
|
|
|
|
|
|
### Token Gitea
|
|
|
|
@ -53,6 +91,13 @@ GITHUB_USERNAME=votre_nom_utilisateur_github
|
|
|
|
|
- `repo` (accès complet aux repositories)
|
|
|
|
|
- `user` (accès aux informations utilisateur)
|
|
|
|
|
|
|
|
|
|
### Token GitLab
|
|
|
|
|
1. Allez dans **Settings** → **Access Tokens** ou **User Settings** → **Access Tokens**
|
|
|
|
|
2. Créez un **Personal Access Token** avec les permissions :
|
|
|
|
|
- `read_api` (lecture des informations API)
|
|
|
|
|
- `read_repository` (lecture des repositories)
|
|
|
|
|
- `write_repository` (écriture des repositories - pour destination)
|
|
|
|
|
|
|
|
|
|
### Token GitHub
|
|
|
|
|
1. Allez dans **Settings** → **Developer settings** → **Personal access tokens** → **Tokens (classic)**
|
|
|
|
|
2. Cliquez sur **Generate new token (classic)**
|
|
|
|
@ -89,7 +134,7 @@ Après avoir configuré vos tokens dans le fichier `.env`, utilisez le script de
|
|
|
|
|
./run.sh --verbose
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
> **💡 Alternative** : Vous pouvez aussi utiliser directement `python migrate.py` si vous avez activé l'environnement virtuel (`source venv/bin/activate`)
|
|
|
|
|
> **💡 Alternative** : Vous pouvez aussi utiliser directement `python main.py` si vous avez activé l'environnement virtuel (`source venv/bin/activate`)
|
|
|
|
|
|
|
|
|
|
## 🎯 Mode Interactif
|
|
|
|
|
|
|
|
|
@ -112,14 +157,14 @@ Le mode interactif (activé par défaut) offre une **interface utilisateur élé
|
|
|
|
|
Après la sélection, l'outil propose de renommer les repositories :
|
|
|
|
|
- **Y** : Ouvrir l'interface de renommage
|
|
|
|
|
- **N/ENTRÉE** : Conserver les noms actuels
|
|
|
|
|
- **Validation automatique** des noms de repositories GitHub
|
|
|
|
|
- **Validation automatique** des noms de repositories pour le provider de destination
|
|
|
|
|
|
|
|
|
|
### Fonctionnalités :
|
|
|
|
|
- ✅ **Checkboxes visuelles** avec émojis
|
|
|
|
|
- 👤 **Distinction propriétaire** : Vos repos vs repos d'autres utilisateurs
|
|
|
|
|
- 🎯 **Sélection intelligente** : Vos repos pré-sélectionnés par défaut
|
|
|
|
|
- 📋 **Tri intelligent** : Vos repos en premier, puis les autres, tous par ordre alphabétique
|
|
|
|
|
- ✏️ **Renommage optionnel** : Possibilité de renommer les repos sur GitHub
|
|
|
|
|
- ✏️ **Renommage optionnel** : Possibilité de renommer les repos sur le provider de destination
|
|
|
|
|
- 📄 **Pagination automatique** (15 repos par page)
|
|
|
|
|
- 🎨 **Interface colorée** avec mise en surbrillance et séparateurs visuels
|
|
|
|
|
- 📊 **Compteur en temps réel** des repos sélectionnés
|
|
|
|
@ -128,27 +173,39 @@ Après la sélection, l'outil propose de renommer les repositories :
|
|
|
|
|
|
|
|
|
|
## 📋 Exemples d'utilisation
|
|
|
|
|
|
|
|
|
|
### Exemple 1 : Migration interactive (défaut)
|
|
|
|
|
### Exemple 1 : Migration Gitea → GitHub (défaut)
|
|
|
|
|
```bash
|
|
|
|
|
# Configuration dans .env
|
|
|
|
|
SOURCE_PROVIDER=gitea
|
|
|
|
|
DESTINATION_PROVIDER=github
|
|
|
|
|
|
|
|
|
|
# Interface interactive pour sélectionner les repos
|
|
|
|
|
./run.sh
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Exemple 2 : Migration automatique
|
|
|
|
|
### Exemple 2 : Migration GitLab → GitHub
|
|
|
|
|
```bash
|
|
|
|
|
# Migre tous vos repositories automatiquement
|
|
|
|
|
# Configuration dans .env
|
|
|
|
|
SOURCE_PROVIDER=gitlab
|
|
|
|
|
DESTINATION_PROVIDER=github
|
|
|
|
|
|
|
|
|
|
# Migration automatique
|
|
|
|
|
./run.sh --no-interactive
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Exemple 3 : Migration sélective
|
|
|
|
|
### Exemple 3 : Migration GitLab → GitLab (entre instances)
|
|
|
|
|
```bash
|
|
|
|
|
# Migre seulement les repositories spécifiés
|
|
|
|
|
# Configuration dans .env
|
|
|
|
|
SOURCE_PROVIDER=gitlab
|
|
|
|
|
DESTINATION_PROVIDER=gitlab
|
|
|
|
|
|
|
|
|
|
# Migration sélective
|
|
|
|
|
./run.sh --repos projet-web api-backend
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Exemple 4 : Migration depuis une organisation
|
|
|
|
|
```bash
|
|
|
|
|
# Migre un repository d'une organisation
|
|
|
|
|
# Migre un repository d'une organisation (fonctionne avec tous les providers)
|
|
|
|
|
./run.sh --repos mon-org/projet-important
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
@ -157,7 +214,7 @@ Après la sélection, l'outil propose de renommer les repositories :
|
|
|
|
|
# 1. Setup initial
|
|
|
|
|
./run.sh --setup
|
|
|
|
|
|
|
|
|
|
# 2. Éditez le fichier .env avec vos credentials
|
|
|
|
|
# 2. Éditez le fichier .env avec vos credentials et providers
|
|
|
|
|
nano .env
|
|
|
|
|
|
|
|
|
|
# 3. Listez vos repositories disponibles
|
|
|
|
@ -192,23 +249,49 @@ Tous les logs sont également sauvegardés dans `migration.log`.
|
|
|
|
|
## 🔧 Structure du projet
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
GiteaToGithubMigrator/
|
|
|
|
|
├── migrate.py # Script principal
|
|
|
|
|
├── config.py # Gestion de la configuration
|
|
|
|
|
├── gitea_client.py # Client API Gitea
|
|
|
|
|
├── github_client.py # Client API GitHub
|
|
|
|
|
├── migration_tool.py # Logique de migration
|
|
|
|
|
├── requirements.txt # Dépendances Python
|
|
|
|
|
├── .env # Configuration (à créer)
|
|
|
|
|
└── README.md # Documentation
|
|
|
|
|
GitMigrator/
|
|
|
|
|
├── main.py # Script principal
|
|
|
|
|
├── core/ # Logique métier centrale
|
|
|
|
|
│ ├── config.py # Gestion de la configuration multi-providers
|
|
|
|
|
│ └── migration_engine.py # Moteur de migration
|
|
|
|
|
├── providers/ # Providers pour différents services Git
|
|
|
|
|
│ ├── base.py # Classes abstraites et modèles
|
|
|
|
|
│ ├── factory.py # Factory pour créer les providers
|
|
|
|
|
│ ├── source/ # Providers source
|
|
|
|
|
│ │ ├── gitea.py # Support Gitea
|
|
|
|
|
│ │ └── gitlab.py # Support GitLab
|
|
|
|
|
│ └── destination/ # Providers destination
|
|
|
|
|
│ ├── github.py # Support GitHub
|
|
|
|
|
│ └── gitlab.py # Support GitLab
|
|
|
|
|
├── ui/ # Interface utilisateur
|
|
|
|
|
│ └── interactive_selector.py
|
|
|
|
|
├── requirements.txt # Dépendances Python
|
|
|
|
|
├── .env # Configuration (à créer)
|
|
|
|
|
└── README.md # Documentation
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## 🌟 Providers supportés
|
|
|
|
|
|
|
|
|
|
### Providers Source
|
|
|
|
|
- **Gitea** : Instances Gitea (self-hosted ou cloud)
|
|
|
|
|
- **GitLab** : GitLab.com ou instances GitLab self-hosted
|
|
|
|
|
|
|
|
|
|
### Providers Destination
|
|
|
|
|
- **GitHub** : GitHub.com
|
|
|
|
|
- **GitLab** : GitLab.com ou instances GitLab self-hosted
|
|
|
|
|
|
|
|
|
|
### Combinaisons possibles
|
|
|
|
|
- Gitea → GitHub
|
|
|
|
|
- Gitea → GitLab
|
|
|
|
|
- GitLab → GitHub
|
|
|
|
|
- GitLab → GitLab (migration entre instances)
|
|
|
|
|
|
|
|
|
|
## ⚠️ Prérequis
|
|
|
|
|
|
|
|
|
|
- Python 3.7+
|
|
|
|
|
- Git installé sur votre système
|
|
|
|
|
- Accès aux APIs Gitea et GitHub
|
|
|
|
|
- Tokens d'authentification valides
|
|
|
|
|
- Accès aux APIs des providers source et destination
|
|
|
|
|
- Tokens d'authentification valides pour les providers
|
|
|
|
|
|
|
|
|
|
## 🛡 Sécurité
|
|
|
|
|
|
|
|
|
@ -221,21 +304,38 @@ GiteaToGithubMigrator/
|
|
|
|
|
### Erreur d'authentification
|
|
|
|
|
- Vérifiez que vos tokens sont valides et ont les bonnes permissions
|
|
|
|
|
- Assurez-vous que les noms d'utilisateur correspondent
|
|
|
|
|
- Vérifiez que les URLs des providers sont correctes
|
|
|
|
|
|
|
|
|
|
### Erreur de clonage
|
|
|
|
|
- Vérifiez votre connexion internet
|
|
|
|
|
- Assurez-vous que Git est installé et accessible
|
|
|
|
|
|
|
|
|
|
### Repository déjà existant
|
|
|
|
|
- L'outil vérifie automatiquement l'existence sur GitHub
|
|
|
|
|
- L'outil vérifie automatiquement l'existence sur le provider de destination
|
|
|
|
|
- Les repositories existants sont ignorés avec un avertissement
|
|
|
|
|
|
|
|
|
|
### Provider non supporté
|
|
|
|
|
- Vérifiez que le provider est bien configuré dans SOURCE_PROVIDER ou DESTINATION_PROVIDER
|
|
|
|
|
- Providers disponibles : gitea, gitlab (source) | github, gitlab (destination)
|
|
|
|
|
|
|
|
|
|
## 📝 Logs
|
|
|
|
|
|
|
|
|
|
Tous les détails d'exécution sont sauvegardés dans `migration.log` :
|
|
|
|
|
- Timestamps des opérations
|
|
|
|
|
- Détails des erreurs
|
|
|
|
|
- Statistiques de migration
|
|
|
|
|
- Informations sur les providers utilisés
|
|
|
|
|
|
|
|
|
|
## 🚀 Extensibilité
|
|
|
|
|
|
|
|
|
|
L'architecture modulaire permet d'ajouter facilement de nouveaux providers :
|
|
|
|
|
|
|
|
|
|
1. **Créer un nouveau provider source** dans `providers/source/`
|
|
|
|
|
2. **Créer un nouveau provider destination** dans `providers/destination/`
|
|
|
|
|
3. **Enregistrer le provider** dans `providers/factory.py`
|
|
|
|
|
4. **Ajouter la configuration** dans `core/config.py`
|
|
|
|
|
|
|
|
|
|
Voir `ARCHITECTURE.md` pour plus de détails sur l'ajout de nouveaux providers.
|
|
|
|
|
|
|
|
|
|
## 🤝 Contribution
|
|
|
|
|
|
|
|
|
@ -243,6 +343,7 @@ Les contributions sont les bienvenues ! N'hésitez pas à :
|
|
|
|
|
- Signaler des bugs
|
|
|
|
|
- Proposer des améliorations
|
|
|
|
|
- Soumettre des pull requests
|
|
|
|
|
- Ajouter de nouveaux providers
|
|
|
|
|
|
|
|
|
|
## 📄 Licence
|
|
|
|
|
|
|
|
|
|