diff --git a/README.md b/README.md index 2d50062..4a1051e 100644 --- a/README.md +++ b/README.md @@ -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