Script
GitPush Auto
GitPush Auto est un script Bash interactif qui guide tout mon flux de travail Git, de la création de branche jusqu'au merge, via des invites colorées et des menus. Plutôt qu'une simple commande add/commit/push, il orchestre un Git Flow complet : détection de la branche principale, garde-fou contre le travail direct sur main/master, création de branche typée, commit, push, ouverture de Pull Request, squash, merge avec gestion des conflits, tag de version et nettoyage de branche. Un mode dry-run et un journal des opérations complètent l'outil.
- stack
- Git
- Bash
- Automation
- CLI

Choix techniques
Pourquoi chaque brique, et ce qu'elle apporte au projet.
Bash pur, sans dépendance
Commandes `git` natives et builtins (`select`, `read`, `case`, regex `[[ =~ ]]`) : portabilité Linux / macOS / Windows (Git Bash ou WSL) sans rien installer.
GitHub CLI optionnel, détecté à l'exécution
`create_pull_request` vérifie `gh` via `command -v` avant de proposer une PR ; si absent, dégradation propre (avertissement + lien d'installation) sans planter.
Parsing d'arguments via boucle `while/case`
`--dry-run`, `--no-logs`, `--version`, `--help` traités avant toute action, avec aide formatée et sortie sur option inconnue.
Codes couleur ANSI 256
Jeu de variables couleurs/styles (succès, erreurs, prompts) pour un déroulé d'étapes lisible d'un coup d'œil.
Détection dynamique de l'environnement Git
`detect_main_branch` (main vs master), `git symbolic-ref` pour la branche courante, `git ls-remote` pour vérifier la connexion avant tout push. Le script s'adapte au repo.
Décisions d'architecture
Les arbitrages structurants, avec leur justification.
- Script monolithique mais fonctionnellement découpé
- Un seul fichier `git-push.sh`, organisé en fonctions à responsabilité unique (`check_branch`, `commit_and_push`, `merge_to_base`, `delete_branch`…). Fichier unique pour l'installation par simple alias, sans renoncer à la lisibilité.
- Mode dry-run de premier ordre
- Un wrapper `execute_command` centralise l'exécution ; en dry-run il affiche la commande au lieu de l'`eval`, pour prévisualiser tout l'enchaînement sans effet de bord.
- Garde-fous et gestion d'erreurs explicites
- Interdiction de travailler sur la branche principale (proposition de basculer/créer `develop`), validation du nom de branche par regex et longueur, vérification réseau avant push, gestion interactive des conflits (résolution manuelle ou `git merge --abort`), `|| exit 1` après chaque commande critique.
- Traçabilité par journal
- `log_message` écrit chaque action horodatée dans `~/.gitpush.log` (désactivable via `--no-logs`). NB : une variable `CONFIG_FILE` (`~/.gitpush.conf`) est déclarée mais pas encore exploitée (v2.0.0).