Maîtriser GIT
Formation à l'outil de gestion de version
Créé par Tony MEMBOT via l'API de présentation Reveal.js
Maîtriser GIT
- Pourquoi choisir GIT ?
- Mise en place
- Les commandes de bases
- Les commandes avancés
- Les commandes "experts"
- Le Git Flow
- Les pull/merge request
- Ligne de commande ou IDE ?
Il était une fois l'histoire de GIT
-
2002 : Linus Torvalds utilise BitKeeper pour Linux, logiciel propriétaire.
-
Début 2005 : BitKeeper arrête sa version gratuite.
-
Avril 2005 : Linus Torvald crée GIT, répondant à ses besoins.
- Système de fichier évolué
- Décentralisé
- Libre
Centralisé VS décentralisé
- Tout l'historique est présent lors d'un clone, pas de besoin de remote.
- Respecte l'éthique du libre : on peut cloner et proposer des pull request.
Les ingrédients de GIT
- Tout est SHA1 : Identifiant unique de chaque objet :
-
Blob : contenu des fichiers
-
Tree : répertoire de blob et/ou autre tree
-
Commit :
- Un arbre
- 0 ou N commits parents
- Un message de description
- Tag
Particularités
- Tout est ajout (même les suppressions de fichiers / dossiers)
- Les liens / commit déférencés sont automatiquement supprimés
Git est optimiser pour ...
- être rapide
- être robute
- gérer un grand nombre de fichier
- réaliser des développements distribués
- rendre trivial la gestion des branches et des merge
- sa compatibilité : SVN / CVS / HTTP / SSH / ...
... mais l'est moins pour
- gérer les gros fichiers binaires
- son côté non "user friendly" aux premiers abords
Installation
- Linux
sudo apt-get install git
- Windows (émulation)
https://git-scm.com/
Paramétrer GIT
Locale (repository)
git config --local
Global (user)
git config --global
Système (tout users)
git config --system
Identifiez vous !
git config --global user.name t.membot
git config --global user.email tmembot@gmail.com
Get Started
git init
touch readme.txt
git status
git add readme.txt
git status
git commit -m "My first commit !"
git status
git log
(init) Initialiser un nouveau repo
git init
- Permet d'initialiser un repository vierge.
- Crée un dossier ".git"
- Initialise une branche nommée "master"
- Peut être créé dans un dossier contenant déjà des dossiers/fichiers
Dossier .git
- Seulement présent à la racine du projet
- Contient :
-
config : Fichiers de configuration (style .ini)
-
objects/* : Repository des objets
-
refs/heads/* : Branches
-
refs/tags/* : Tags
-
logs/* : Logs
-
refs/remotes/* : Tracking des remotes
-
index : le "cache index" (staging)
-
HEAD : pointeur sur un commit de la branche courante (parent du prochain commit)
Les options intéressantes
- Options :
-
-
--bare : Création d'un repository sans arbre de travail.
-
--shared : Partager son repository.
Note : Pour obtenir de l'aide sur une commande
git [command] --help
git add [filename]
- Permet d'ajouter des fichiers dans la zone d'index (staging)
- Permet d'ajouter des portions de code dans la zone d'index
- Ignore les fichiers / dossiers du .gitignore
Les options intéressantes
- Options :
-
-A | --all : Ajout de toutes les modifications d'un seul coup
-
-p | --patch : Ajout partiel de code dans un fichier
-
-f : Force l'ajout d'un fichier contenu dans le .gitignore
Les options intéressantes
Les options intéressantes
Les options intéressantes
Les options intéressantes
Les options intéressantes
Les options intéressantes
Explorons les repos distants
Git clone
Commande permettant de dupliquer un repository distant.
C'est la branche par défaut (généralement nommée master) qui est récupéré
https://git-scm.com/docs/git-clone
GIT ignore
- Git ignore
- Git ignore global (dans le fichier, partie core : excludesfile = ~/.gitignore_global)
- www.gitignore.io
Les commandes avancées
- branch
- stash
- merge
- rebase
- tag
- mv
- rm
- log
">
Les commandes "experts"
- blame
- bisect
- archive
- gitk
- cherry-pick
Ligne de commande ou IDE ?
Allons plus loin
git config --global alias.logall "log --graph --abbrev-commit --decorate --date=relative --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white) - %an%C(reset) %C(bold yellow)%d%C(reset)' --all"
git config --global alias.wdiff "diff --word-diff"
[color] ui = auto
Maîtriser GIT
Formation à l'outil de gestion de version
Créé par Tony MEMBOT via l'API de présentation Reveal.js