Git Total
Programme
Préparer son environnement de travail
Configurations globale et locale
Aliases et raccourcis incontournables
Activer les complétions automatiques
Informations d’état automatiques dans le prompt
Concepts de la gestion de dépôt Git
Les « zones » : working directory/tree, index/stage, dépôt
Les « états » : non versionné, modifié, staged, non modifié
Aperçu du dossier .git
Premier dépôt
Initialisation
Import initial
Exclusions globale et locale (
.gitignore
,.git/info/exclude
…)Savoir ce qu’on a dans chaque zone / état en utilisant efficacement
git diff
La notion critique de
HEAD
Syntaxes de révision : du basique à l’avancé, mais toujours utile
Optimiser la consultation de l’historique : merveilles cachées de
git log
.
Commits atomiques et approche chirurgicale
-
Ajouts partiels
- seulement certains fichiers ou certaines parties de fichiers
-
Unstaging
- Annuler le dernier commit
- Modifier le dernier commit
- Raccourcis fréquents et pratiques
Gérer l’urgence avec le stash
Mettre son travail de côté le temps d’une tâche urgente
-
Récupérer le stash
- façon classique ou dans une nouvelle branche,
- avec ou sans le stage
- avec ou sans les untracked
Aspect pratique face au conservatisme de Git lors d’une demande de fusion
Récupérer un commit « perdu »
Le reflog
Modalités de préservation et de purge
Gestion de branches
Une branche en Git, c’est quoi au juste ? Contraste avec les systèmes plus classiques (SVN, etc.)
Fusion classique
Fast-forward
Stratégies de fusion et décisions automatiques
Méthodologie de résolution de conflits
Fusion vs. Rebasing : quand, pour qui, pourquoi ?
Scenarii classiques de rebasing
Stratégies de gestion de branches et de collaboration
Git reset, le couteau suisse méconnu de Git
Un reset, qu’est-ce que c’est ?
Les 5 modes de reset
Scenarii classiques où reset nous sauve la vie
Resets irréparables ou non
Ne jamais perdre un commit grâce au reflog
Prendre soin de son historique de révisions
Un historique au cordeau : quels intérêts ?
Réordonner les commits
Supprimer des commits
Découper des commits
Fusionner des commits
Annuler un commit ancien
Dépôts distants
Autant de remotes qu’on veut…
Protocoles réseau de Git : préférences selon le contexte
Bien comprendre les relations entre fetch, merge, rebase, pull et push
Tracking ou non ?
Branches distantes vs. branches locales
Les bons réflexes pour avoir un push et un pull qui fonctionnent bien
Récupérer des portions choisies de l’historique
Cherry-picking
Lister rapidement les commits et branches pertinents
Traquer automatiquement l’origine d’un bug
Principe de recherche dichotomique
Exécution manuelle de
git bisect
Scripting et automatisation de bisect
Enregistrer puis partager la résolution manuelle d’une fusion
Configuration du rerere
Enregistrer la résolution du conflit
Exploitation automatique et vérification manuelle
Workflow appliqué : éviter les merges de contrôle sur les branches de longue durée
Comprendre et maîtriser les submodules et les subtrees
Principes fondamentaux
Mise en place
Déploiement
Mises à jour
Les nombreux pièges
Principes et contraste entre submodules et subtrees
Subtrees ou submodules ? Quel choix pour quelle situation ?
Automatiser des traitements sur événements
Les hooks
Hooks en local et côté serveur
Scenarii classiques d’utilisation
Quelques exemples concrets
Bien penser son workflow
Rappels des approches classiques et principaux workflows documentés
Axes de réflexion et recommandations