# 🚀 Outil de Migration Git Multi-Providers Cet projet fournit un outil pratique et modulable pour migrer automatiquement vos repositories entre diffĂ©rents providers Git. ## ✹ FonctionnalitĂ©s - **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 - **Renommage intelligent** : PossibilitĂ© de renommer les repositories lors de la migration - **Migration sĂ©lective** : Choisissez spĂ©cifiquement quels repositories migrer en ligne de commande - **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/GitMigrator.git cd GitMigrator ``` 2. **Configuration automatique** : ```bash ./run.sh --setup ``` Le script va automatiquement : - CrĂ©er un environnement virtuel Python - 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 selon les providers choisis. ## 🔧 Configuration ### Configuration avec support multi-instances ```env # Gitea Source Configuration GITEA_SOURCE_URL=https://votre-instance-gitea-source.com GITEA_SOURCE_TOKEN=votre_token_gitea_source GITEA_SOURCE_USERNAME=votre_nom_utilisateur_gitea_source # Gitea Destination Configuration GITEA_DEST_URL=https://votre-instance-gitea-dest.com GITEA_DEST_TOKEN=votre_token_gitea_dest GITEA_DEST_USERNAME=votre_nom_utilisateur_gitea_dest # GitLab Source Configuration GITLAB_SOURCE_URL=https://gitlab-source.com GITLAB_SOURCE_TOKEN=votre_token_gitlab_source GITLAB_SOURCE_USERNAME=votre_nom_utilisateur_gitlab_source # GitLab Destination Configuration GITLAB_DEST_URL=https://gitlab-dest.com GITLAB_DEST_TOKEN=votre_token_gitlab_dest GITLAB_DEST_USERNAME=votre_nom_utilisateur_gitlab_dest # GitHub Configuration (same for source and destination - only one instance) GITHUB_TOKEN=votre_token_github GITHUB_USERNAME=votre_nom_utilisateur_github ``` **📝 Instructions :** 1. **Multi-instances** : Vous pouvez configurer diffĂ©rentes instances du mĂȘme provider 2. **MĂȘme instance** : Utilisez les mĂȘmes credentials pour source et destination si c'est la mĂȘme instance 3. **Migration flexible** : Supports GitLab → GitLab, Gitea → Gitea, etc. entre diffĂ©rentes instances 4. **Configuration minimale** : Configurez seulement les providers source/destination que vous utilisez 5. L'outil vous demandera interactivement quel provider utiliser comme source et destination ## 🔑 Configuration des tokens ### Token Gitea 1. Allez dans **Settings** → **Applications** → **Generate New Token** 2. Donnez un nom au token et sĂ©lectionnez les permissions : - `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)** 3. SĂ©lectionnez les permissions : - `repo` (accĂšs complet aux repositories privĂ©s) - `public_repo` (accĂšs aux repositories publics) ## 🚀 Utilisation AprĂšs avoir configurĂ© vos tokens dans le fichier `.env`, utilisez le script de lancement : ### Migration interactive (par dĂ©faut) ```bash ./run.sh ``` ### Migration automatique de tous vos repos ```bash ./run.sh --no-interactive ``` ### Migration de repositories spĂ©cifiques ```bash ./run.sh --repos mon-repo autre-repo ``` ### Lister les repositories disponibles ```bash ./run.sh --list ``` ### Mode verbose (plus de dĂ©tails) ```bash ./run.sh --verbose ``` > **💡 Alternative** : Vous pouvez aussi utiliser directement `python main.py` si vous avez activĂ© l'environnement virtuel (`source venv/bin/activate`) ## 🎯 Mode Interactif Le mode interactif (activĂ© par dĂ©faut) offre une **interface utilisateur Ă©lĂ©gante** pour sĂ©lectionner prĂ©cisĂ©ment quels repositories migrer : ```bash ./run.sh # Mode interactif par dĂ©faut ``` ### ContrĂŽles dans l'interface interactive : - **↑↓** : Naviguer entre les repositories - **←→** : Changer de page (si beaucoup de repos) - **ESPACE** : Cocher/dĂ©cocher un repository - **A** : SĂ©lectionner tous les repositories - **N** : DĂ©sĂ©lectionner tous les repositories - **ENTRÉE** : Confirmer la sĂ©lection et passer au renommage (optionnel) - **Q** : Quitter sans migrer ### Interface de renommage : 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 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 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 - 🔒 **Indicateurs visuels** (privĂ©/public) - 📝 **Descriptions tronquĂ©es** pour un affichage propre ## 📋 Exemples d'utilisation ### Exemple 1 : Migration interactive (dĂ©faut) ```bash # 1. Configurez vos providers dans .env # 2. Lancez l'outil ./run.sh # L'outil vous demandera : # - Quel provider utiliser comme source # - Quel provider utiliser comme destination # - Puis vous pourrez sĂ©lectionner les repos Ă  migrer ``` ### Exemple 2 : Migration automatique ```bash # Migre tous vos repositories automatiquement # (aprĂšs sĂ©lection interactive des providers) ./run.sh --no-interactive ``` ### Exemple 3 : Migration sĂ©lective ```bash # Migre seulement les repositories spĂ©cifiĂ©s # (aprĂšs sĂ©lection interactive des providers) ./run.sh --repos projet-web api-backend ``` ### Exemple 4 : Migration depuis une organisation ```bash # Migre un repository d'une organisation (fonctionne avec tous les providers) ./run.sh --repos mon-org/projet-important ``` ### Exemple 5 : Premier lancement (configuration) ```bash # 1. Setup initial - crĂ©e le fichier .env template ./run.sh --setup # 2. Éditez le fichier .env avec vos credentials (au moins 2 providers) nano .env # 3. Lancez l'outil - il vous demandera quels providers utiliser ./run.sh # 4. Pour lister les repos disponibles (aprĂšs sĂ©lection du provider source) ./run.sh --list ``` ### Exemple 6 : Migration avec renommage ```bash # 1. Lancer le mode interactif ./run.sh # 2. SĂ©lectionner les providers source et destination # 3. SĂ©lectionner les repos Ă  migrer # 4. Choisir "Y" pour le renommage # 5. Renommer les repos un par un # - Appuyer sur ENTRÉE pour garder le nom original # - Taper un nouveau nom pour renommer # 6. Confirmer et lancer la migration ``` ## 📊 RĂ©sultats L'outil affiche un rĂ©sumĂ© dĂ©taillĂ© Ă  la fin : - ✅ Nombre de migrations rĂ©ussies - ❌ Nombre de migrations Ă©chouĂ©es - 📝 DĂ©tail par repository Tous les logs sont Ă©galement sauvegardĂ©s dans `migration.log`. ## 🔧 Structure du projet ``` 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 des providers source et destination - Tokens d'authentification valides pour les providers ## 🛡 SĂ©curitĂ© - Les tokens sont stockĂ©s dans un fichier `.env` (ajoutez-le Ă  `.gitignore`) - Les URLs d'authentification ne sont jamais loggĂ©es - Nettoyage automatique des repositories temporaires ## 🐛 RĂ©solution de problĂšmes ### 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 le provider de destination - Les repositories existants sont ignorĂ©s avec un avertissement ### Provider non supportĂ© ou non configurĂ© - VĂ©rifiez que vos providers sont bien configurĂ©s dans le fichier .env - Assurez-vous d'avoir au moins 2 providers configurĂ©s - Providers disponibles : gitea, gitlab, github - L'outil vous indiquera quels providers sont configurĂ©s au dĂ©marrage ## 📝 Logs Tous les dĂ©tails d'exĂ©cution sont sauvegardĂ©s dans `migration.log` : - Timestamps des opĂ©rations - SĂ©lection des providers source et destination - DĂ©tails des erreurs - Statistiques de migration - Informations complĂštes sur le processus de migration ## 🚀 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 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 Ce projet est sous licence MIT. Voir le fichier LICENSE pour plus de dĂ©tails.