En tant que développeur, je me suis souvent retrouvé avec des dizaines de dossiers de projets locaux qui n’étaient pas encore sous contrôle de version. Le processus de les initialiser un par un sur Git, de créer un dépôt sur GitHub, puis de les synchroniser était répétitif et chronophage. Pour résoudre ce problème, j’ai créé un script Python de synchronisation intelligent.
Le Problème : La Gestion Manuelle des Dépôts
Le workflow manuel classique pour chaque nouveau projet ressemble à ceci :
- Aller sur GitHub, créer un nouveau dépôt.
- Dans le terminal, naviguer vers le dossier du projet.
- Taper
git init
. - Créer un fichier
.gitignore
. - Taper
git add .
, puisgit commit -m "Initial commit"
. - Copier l’URL du dépôt distant.
- Taper
git remote add origin <URL>
. - Taper
git push -u origin main
.
Répéter cela pour des dizaines de projets est fastidieux. Mon script a été conçu pour automatiser entièrement ce processus, tout en gérant les projets déjà suivis.
Une Solution d’Automatisation Robuste
Mon script ne se contente pas d’exécuter des commandes Git en boucle. Il intègre une logique complète pour gérer l’ensemble du cycle de vie de la synchronisation.
Détection Intelligente des Projets
Le script scanne des répertoires parents que je lui spécifie (C:\Projects
, D:\Labs
, etc.). Il identifie un dossier comme étant un “projet” s’il contient des fichiers indicateurs comme package.json
, requirements.txt
, index.html
, ou même un simple README.md
.
Gestion des Nouveaux Projets
Lorsqu’un nouveau projet est détecté, le script me guide de manière interactive :
- Il me demande si je souhaite le pousser sur GitHub.
- Il me demande si le dépôt doit être public ou privé.
- Il crée automatiquement le dépôt distant via l’API GitHub.
- Il initialise le dépôt Git local, crée un fichier
.gitignore
par défaut (personnalisable) s’il n’en existe pas, et effectue le commit initial. - Il lie le dépôt local au dépôt distant et effectue le premier
push
.
Suivi des Mises à Jour
Pour les projets déjà synchronisés, le script vérifie s’il y a des modifications locales non commitées (git status
). Si c’est le cas, il me demande simplement un message de commit et se charge de synchroniser les mises à jour.
Aspects Techniques Notables
- Gestion d’État : Le script mémorise les projets qu’il a déjà traités (qu’ils soient suivis ou ignorés) dans un fichier
tracked_repos.json
. Cela lui évite de me poser les mêmes questions à chaque exécution. - Sécurité : Mon token d’accès personnel GitHub est stocké de manière sécurisée dans un fichier
.env
, jamais en clair dans le code, grâce à la bibliothèquepython-dotenv
. - “Backdating” Optionnel : Une fonctionnalité intéressante que j’ai ajoutée est la possibilité de dater le commit initial à la date de dernière modification du dossier. Cela permet de donner une chronologie plus fidèle à l’historique du projet.
- Logging Détaillé : Toutes les actions, les commandes Git exécutées et les erreurs éventuelles sont consignées dans un fichier de log, ce qui est essentiel pour le débogage.
Conclusion
Ce projet est un parfait exemple de la façon dont un script bien pensé peut transformer une tâche fastidieuse en un processus automatisé et fluide. Il me fait gagner un temps précieux et garantit que tous mes projets sont systématiquement sauvegardés et versionnés sur GitHub. C’est un outil devenu indispensable dans mon workflow de développement quotidien.