Skip to content

Latest commit

 

History

History
504 lines (289 loc) · 9.07 KB

slides.md

File metadata and controls

504 lines (289 loc) · 9.07 KB

Introduction à Git

Who am I?

Brendan Abolivier

M2 Robotique
Alternant @ Cozy Cloud

@BrenAbolivier

Git: WTF?

  • Travail collaboratif
  • Gestion de version
    • Trace de tous les changements
    • "Voyage dans le temps"

Installer

Organisation du cours

  • Notions théoriques
  • Mises en pratique
  • Démos

Quelques notions


Local / serveur

Deux utilisations distinctes

Local

Garder une trace de toutes ses modifications

Utile pour :

  • Travailler hors ligne
  • Garder une trace d'un état stable
  • Revenir en arrière sur un mauvais travail
  • ...

Local : Je travaille où ?

Sur mon ordinateur !

Serveur

Travailler en équipe

Utile pour :

  • Développer un projet à plusieurs
  • Garder une sauvegarde de son travail en ligne
  • Publier les sources de son projet
  • ...

Serveur : Je travaille où ?

Sur l'infrastructure d'un hébergeur

Sur ma propre infrastructure

Serveur : Le push-pull

  • Push : J'envoie mes modifications
  • Pull : Je récupère des modifications

Dépôts

L'emplacement de votre projet

Sur le serveur, et en local

En local

Versionner son projet

Sur le serveur

Copie du projet au moment du push


Commits

Repères

Trace datée du moindre changement dans le projet

Les commits, ça s'empile


En résumé

  • Mon projet est à deux endroits à la fois :
    • Sur mon ordinateur
    • Sur un serveur
  • Il se trouve dans un dépôt
  • Je décris mes modifications dans un commit
  • J'envoie mes modifications sur le serveur avec un push (je pousse mes modifications)
  • Je récupère les modifications d'un autre depuis le serveur avec un pull (je tire les modifications)

En pratique

Création d'un dépôt

Ça se fait côté serveur

(GitHub)

La ligne de commande Git

Configuration initiale

git config --global user.name "Brendan Abolivier"
git config --global user.email "[email protected]"

Récupération du dépôt en local

git clone https://web.isen-bretagne.fr/gitlab/baboli18/test.git

Ici, l'adresse de mon dépôt est https://web.isen-bretagne.fr/gitlab/baboli18/test.git

État des modifications

Voir les fichiers modifiés/ajoutés/supprimés

$ git status
Sur la branche master
Votre branche est en avance sur 'origin/master' de 20 commits.
  (utilisez "git push" pour publier vos commits locaux)
Modifications qui ne seront pas validées :
  (utilisez "git add <fichier>..." pour mettre à jour ce qui sera validé)
  (utilisez "git checkout -- <fichier>..." pour annuler les modifications dans la copie de travail)

    modifié :         slides.md

aucune modification n'a été ajoutée à la validation (utilisez "git add" ou "git commit -a")

Voir les modifications dans les fichiers modifiés

git diff

Envoi de modifications

Création du commit

git add [...]
git rm [...]
git commit -m "Mon super commit"

Envoi du commit

git push

Fragmenter ses modifications

Création de plusieurs commits

git add app.js
git commit -m "Fonctionnalité X"
git rm obsolete.js
git commit -m "Suppression de obsolete"

Envoi

git push

Récupérer des modifications

git pull

Lister les modifications

git log

Revenir à un commit précis

git checkout [hash du commit]

Annuler des changements (hors commit)

git checkout [fichier]

Annuler un commit

git revert [commit]

On peut récupérer le hash du commit avec git log

Annuler un commit relativement

Exemple : Annuler les deux derniers commits

git revert HEAD~2

(fonctionne aussi avec git checkout)

Démo !


Aller plus loin


Les forks

Copie du dépôt à l'instant t

Le fork se comporte comme un dépôt

Conventions

La plupart du temps, on gère son projet en suivant ces conventions :

  • Pour contribuer à un projet, on fork son dépôt
  • On intègre nos modifications sur une nouvelle branche
  • On ouvre une merge request sur le dépôt d'origine

Les branches

Ton dépôt est un arbre

Kékecé ?

  • Branche initiale : master
  • Généralement une copie à un moment t de master + changements
  • On "tire une branche" pour :
    • Développer des fonctionnalités
    • Effectuer des relectures de code
    • Assurer la stabilité du projet

Conventions

La plupart du temps, on gère son projet en suivant ces conventions :

  • master : Branche principale du dépôt
  • dev : Contient les développements en cours
  • feature/[...] : Développement d'une fonctionnalité
  • fix/[...] : Développement d'une correction de bug

Note : Seule master est créée automatiquement

Passer d'une branche à l'autre

On demande la fusion d'une branche dans une autre

  • GitLab : Merge requests
  • GitHub : Pull requests

(mais en vrai, c'est la même chose)

Les merge requests

Exemple

Alice et Bob travaillent sur un projet, sur un dépôt de Bob.

Alice veut ajouter un formulaire au projet.

  1. Elle fork le dépôt
  2. Elle crée la branche feature/formulaire sur son fork
  3. Elle y développe le formulaire
  4. Elle ouvre une merge request de feature/formulaire sur son fork vers dev sur le dépôt de Bob
  5. Bob relit le code d'Alice et fusionne sa branche sur son dépôt

Le formulaire d'Alice est maintenant dans dev

Le cas de master

  • Branche principale du dépôt
  • État stable du projet
    • N'importe qui doit pouvoir l'utiliser

On fusionne dans master quand :

  • On sort une nouvelle version du projet
  • On sort un correctif d'un bug critique

Exemple, seconde partie

Alice et Bob ont rajouté plusieurs fonctionnalités à leur projet.

  1. L'un.e des deux ouvre une merge request de dev vers master
  2. Les deux relisent les changements depuis la dernière mise à jour de master
  3. L'autre fusionne dev dans master

En résumé

Encore une fois, des conventions !

  • Je travaille sur le dépôt d'un autre à l'aide d'un fork
  • Je travaille sur une branche qui décrit ma modification
  • Je demande l'ajout de mes changements via une merge request
  • master fait référence à une version stable de mon projet

En pratique

Création de la branche

Côté serveur

Changement de branche

Récupération de la nouvelle branche

git fetch

Passage sur la nouvelle branche

git checkout [nom de la branche]

Push sur la branche

git push --set-upstream origin [nom de la branche]

la première fois, puis

git push

les fois suivantes

Démo !


Encore plus loin

Intégration continue

Lancement des tests unitaires à chaque push et merge request

Mise en production automatisée

Exemple : Caddy (et son module git)

Mettre des modifications en production avec un push


Merci de votre attention !

Questions ?

[email protected]