Git & GitHub


Hello 👋


Pourquoi?

Git
Version control
Garder historique de toutes les modifications, naviguer dans l'historique

Collaboration
Travailler en parallèle sur plusieurs versions du projet, en grand nombre, expérimenter...
"Git gets easier once you get the basic idea that branches are homeomorphic endofunctors mapping submanifolds of a Hilbert space."
— Isaac Wolkerstorfer
Principes et bonnes pratiques
Branches, merge & PR
Workflow
Profil GitHub
Today
Principes
Les espaces

Appareil photo 📷
First things first
$ git status
- Différences entre index et workspace
- Différences entre index et local repository
- Fichiers non suivis
Détails des différences
$ git diff
Ajoute les modifs et nouveaux fichiers à l'index
$ git add path/file_name
ou
$ git add -A
$ git commit
ou
$ git commit -m "commit short message"
Ajoute le contenu actuel de l'index dans un commit du repository local
First things first
Séparer les commits
$ git add path/file_name
$ git add path/file_name2
$ git commit -m "Commit one feature"
$ git add path/another_file
$ git commit -m "Commit another unrelated update"

$ git add --patch
patch !
Your turn

Commits
Message de commit
- Titre clair et concis
- Anglais !
- Présent, impératif
- Description si besoin
✓Bon :
Add integration tests for character CRUD
X Pas bon :
Added new CSS and the styling is now over
Bug corrigé sur le formulaire
Titre uniquement
$ git commit -m "Fix typo in config file"
Avec description
$ git commit

Historique
git log

SHA

$ git reset --hard
$ git reset --hard [SHA_COMMIT]
$ (git checkout [SHA_COMMIT])
Your turn

Remote
Sauvegarde de son code à distance
Collaboration via un remote partagé
$ git remote add origin git@github.com:etc.
$ git push origin branch-name

$ git push -u origin branch-name
$ git push
$ git pull
Alias
Quick Tips
Package éditeur
Sublime : GitGutter package

Branches

Tester, expérimenter
Créer des nouvelles features
Travailler en équipe

Navigation entre branches
Lister les branches

créer une branche
se positionner sur une branche
$ git branch branch-name
$ git checkout branch-name
$ git checkout -b branch-name
combo
$ git branch

Your turn

Merge
Fusionner 2 branches
Updater une branche
Ramener les modifs validées sur master

$ git checkout nom-branche1
$ git merge nom-branche2
Pull request
(Merge Request sur GitLab)

- Titre clair et explicite
- Mentionner ou affecter les personnes concernées
- Même principe que pour les commits : ne pas tout mélanger

Relire ses modifs !

Your turn

Fork
Principe
Copie d'un repository sans affecter le repository original
- Contribuer à des projets sans avoir les droits sur le repo
- Expérimenter en partant d'un projet existant
Contribution à des projets open source :

Git stash
Pile de travail en cours
Passer temporairement sur une autre branche
Déplacer le travail en cours sur une autre branche
$ git stash
$ git stash pop
Gérer les conflits
Everything's gonna be alright
(but maybe it's time to talk with your team)

Command line
git ajoute des marqueurs dans le fichier
<<<<<<< HEAD
Update hello again from feature1 branch
=======
Update hello again from master
>>>>>>> master
résoudre le conflit, supprimer les marqueurs
$ git commit
puis sans message de commit

Your turn

GitHub (PR)
GitHub vérifie les conflits automatiquement
au moment de la PR


résoudre les différents conflits dans l'interface GitHub (meh)
Travail en équipe
workflows
Avec ou sans PR
Gestion des conflits

pull-merge-push
git pull
git checkout -b cool-feature
modifs...
git commit...
modifs...
git commit...
git checkout master
git pull
git merge cool-feature
git push
Workflow 1

Pull requests
git pull
git checkout -b cool-feature
modifs...
git commit...
modifs...
git commit...
git push origin cool-feature
→ Open Pull Request
Workflow 2

Your turn

Gérer les conflits en amont
Merger master sur sa branche
Gérer les confits
Merger sa branche sur master
$ git pull origin master
$ git merge master
...
$ git checkout master
$ git merge cool-feature
$ git push
pull-merge-push
git pull
git checkout -b cool-feature
modifs...
git commit...
modifs...
git commit...
git pull origin master
git merge master
git checkout master
git merge cool-feature
git push
Clean Workflow 1
Gestion des conflits
Pull requests
git pull
git checkout -b cool-feature
modifs...
git commit...
modifs...
git commit...
git push origin cool-feature
PR de master depuis cool-feature
Gestion des conflits
PR de cool-feature depuis master
Clean Workflow 2
Clean Workflow, with PR 🤓
git checkout master
git pull
git checkout -b feature1
modifs...
git commit...
modifs...
git commit...
git checkout master
git pull
git checkout feature1
git merge master
git push -u origin feature1
→ Open Pull Request
⚠ Commandes destructrices
- git reset
- git push --force
- git merge
(think twice)

Profil GitHub - CV

Quoi mettre dedans ?
Cheat Sheets
Tests techniques
Projets persos
Contributions
Exemples
- To do list
- Tracker de prix de cryptos
- Chat Rails avec Action Cable
- Random meme generator
- Gem Ruby...
Listes d'idées
Présentation
-
Photo
-
Nettoyer régulièrement
- Description des projets
- README
> Stackedit : https://stackedit.io/app
> https://github.com/matiassingers/awesome-readme
> https://gist.github.com/PurpleBooth/109311bb0361f32d87a2 - In english please
- Emojis
https://www.webpagefx.com/tools/emoji-cheat-sheet/
Tips
- Clean code (keep it simple)
- Varier le type de projet
- Varier outils utilisés
- Nom des variables
- Nom des commits...
Ressources
Learn enough git to be dangerous
https://www.learnenough.com/git-tutorial
Cours OpenClassrooms
https://openclassrooms.com/courses/gerer-son-code-avec-git-et-github
Livret Launch School



1/2
Ressources

2/2


Workshop Git
By durev
Workshop Git
- 714