@title[Introduction]
@title[Difference]
- Git -> Logiciel de gestion de versions (VCS), Linus Torvalds, 2005
- GitHub -> Site et service d'hebergement de repos Git, 2008
@title[Pourquoi ?]
- Historique des changements (VCS)
- Travail collaboratif
- Décentralisé (contrairement a SVN)
@title[Repositories]
Repository (dépot) = fichiers + historique (.git/).
@title[Créer un repository]
git init
: créer un repo localgit clone <adresse>
: cloner un repo distant
@title[Commit]
Plus petite unité de changement. git commit
@title[Workflow de base]
@title[Commandes]
git add [fichiers]
: stager les fichiersgit commit -m "<message>"
: créer un commit avec<message>
Et une petite démo
@title[Status]
Pas de panique -> git status
@title[.gitignore]
.gitignore
: fichiers que vous ne voulez pas ajouter au repo (binaires générés par le compilateur, fichiers de config secrets, etc...)- Wildcard
*
et**
supportés, ainsi que noms de dossiers, par exempletarget/
- GitHub fournit des
.gitignore
pour la plupart des langages
@title[Remotes]
@title[Commandes de Remotes]
git fetch --all
récupère toutes les informations sur les branches distantesgit pull <origin> <branch>
récupère et merge distante dans localegit push <origin> <branch>
pousse locale vers distante
Et une autre démo
@title[Gérer les Remotes]
git remote add <nom> <adresse>
git remote remove <name>
git remote -v
@title[GitHub]
- GitHub permet d'héberger les remotes
- En pratique, initialiser le repo sur GitHub puis le cloner via Git :
git clone
Note: Initialiser un repo vide puis le cloner
@title[Branches]
@title[Commandes de branches]
git branch <nom>
pour créer une branchegit checkout <nom>
pour changer de branchegit merge <branche2>
pour merger branche2 dans la branche actuelle
@title[Merge Conflict]
Git gère le code ligne par ligne, donc si deux personnes modifient la meme ligne : conflit
@title[Resolution]
On édite les fichiers incriminés "a la main"
Ou par fichier :
git checkout --ours <fichier>
git checkout --theirs <fichier>
@title[Open source et collaboration]
GitHub est "la plus grande communauté open source du monde" : Git et GitHub permet d'aisément collaborer aux projets FOSS d'autres utilisateurs
@title[Collaboration]
- Issue : bug report ou demande d'amélioration
- Forker : copier le repo d'un autre utilisateur (on appelle le repo forké 'upstream')
- Pull request : demander au propriétaire de 'upstream' d'intégrer les changements
Note: Montrer un exemple d'issue (par exemple https://github.com/CodingTrain/website/issues). Aussi demo forking + PR.
@title[Dans un projet public...]
- README.md : description du projet
- LICENSE : document légal. Sans licence, les lois de copyright normales (pas Free Software du tout). Choose a Licence
- CONTRIBUTING.md et CODE_OF_CONDUCT.md : pour un gros projet, respectivement guide de contribution et code de conduite de la communauté
@title[Stash]
git stash push
sauvegarde de l'état de la copie de travailgit stash pop
charger le dernier état sauvegardé dans la copie de travail
@title[Rebase]
Changer l'historique. Un peu compliqué donc de la doc
git rebase
(-i
pour la version "interactive")
@title[Rebase]
Ensuite, plus qu'a git checkout master
et git merge feature1
@title[Rebase conflict]
git rebase --abort
pour annuler- Résoudre les conflits comme précédemment et
git rebase --continue
@title[Squash]
@title[Diff]
Changements entre deux commits
git diff
: entre le dernier commit et la copie de travailgit diff <commit>
: entre<commit>
et la copie de travailgit diff <commit1> <commit2>
: entre<commit1>
et<commit2>
(! ordre)
@title[Help]
git --help
: aide généralegit <cmd> --help
: aide d'une commande
@title[GitKraken]
@title[Student Developer Pack]
https://education.github.com/pack
- Repos privés illimités
- GitKraken Pro pour un an
- Et pleins de bonnes choses !
@title[La suite]
- Des exercices : https://github.com/SUStudentDevs/Applied-Gitology
- Des guides plus détaillés : https://guides.github.com