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

  • Principes fondamentaux
  • Différences avec svn:externals
  • Mise en place
  • Déploiement
  • Mises à jour
  • Les nombreux pièges

Comprendre et maîtriser les subtrees

  • Principes et contraste avec les submodules
  • Mise en place
  • Déploiement
  • Mises à jour
  • 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