Cours Git
Cours Git
Cours Git
Thibault Cholez
[email protected]
28/09/17
Introduction aux SCM Git SCM et intégration continue Biblio
Outline
2 Git
Architecture
Commandes de base
Outils et pratique au quotidien
Outline
2 Git
Architecture
Commandes de base
Outils et pratique au quotidien
Définition
Définition
Plusieurs accronymes
Problème
Maı̂triser de code produit durant un développement logiciel
implique de savoir ce qui a été fait :
Par l’ensemble des développeurs (Qui ? )
Dans le temps (Quand ? )
Pour quel motif/fonctionnalité (Pourquoi ? )
Impliquant de nombreuses fonctions, dans de nombreux
fichiers (Où ? Comment ? )
→ Leur utilité ne se limite pas au travail à plusieurs.
Utilité
Historique
Principaux SCM
Git
Un peu de vocabulaire
Principaux termes
Git
Pourquoi étudier Git ?
Créé par Linus Torwarld pour gérer les sources du noyau Linux
Très souple et puissant mais complexe et peu intuitif →
apprentissage ardu
SCM le plus utilisé actuellement, libre (GPL), communauté
très active
Devient un standard (l’est déjà dans le monde du libre)
SVN est trivial en comparaison
Git
Git
Git
Git
Objectifs
Git
Outline
2 Git
Architecture
Commandes de base
Outils et pratique au quotidien
Outline
2 Git
Architecture
Commandes de base
Outils et pratique au quotidien
SCM décentralisé
Principes fondateurs
Staging area
Index intermédiaire
CVS, SVN ne stockent que les deltas des fichiers modifiés par
un commit
Git stocke tout le contenu des fichiers modifiés par un commit
(mais utilise une compression intelligente basée sur la version
antérieure la plus proche)
Permet une grande souplesse
Références
L’historique du projet est un graphe de commit. Certaines
références sur ce graphe sont utiles :
master : référence la branche principale
HEAD : par défaut, référence le commit le plus récent de la
branche courante (sera le parent du prochain commit)
HEAD-2 : deux commits avant la HEAD
Bonnes pratiques
3-way merge
A: C: B: -> merged:
milk milk milk milk
juice juice
flour flour flour flour
sausage sausage
eggs eggs eggs eggs
butter butter
<<<<<<< A
I had one egg and three sausages for breakfast.
||||||| C
I had one egg and two sausages for breakfast.
=======
I had two eggs and two sausages for breakfast.
>>>>>>> B
Marqueurs de conflits
Outline
2 Git
Architecture
Commandes de base
Outils et pratique au quotidien
Configuration et aide
Aide
Configuration globale
Premières commandes
Initialisation du dépôt
Fichiers
Manipulation de fichiers
Attention : pour être enregistrés, les commandes manipulant le
système de fichiers doivent être réalisées par l’intermédiaire de git !
Renommer un fichier : git mv old name new name
Supprimer un fichier : git rm fichier
Sur un fichier
Sur un commit
Création et navigation
Les branches permettent de réaliser un développement en parallèle
la branche principale afin de limiter les impacts.
Lister les branches existantes : git branch
Créer une nouvelle branche : git branch nom branche
(nom racine ou SHA1 )
Changer la branche active : git checkout nom branche
(revient à déplacer la référence HEAD vers le commit le plus
récent de cette branche)
Revenir sur la branche principale : git checkout master
Placer HEAD sur un commit particulier : git checkout SHA1
Regroupement et supression
Les branches ont vocation à être réintégrées à la branche
principale.
Fusion de la branche courante avec une autre : git merge
nom branche (génère un commit avec deux parents, un dans
chaque branche)
Supprimer une branche : git branch -d nom branche
Transplantation de commits
État du graphe :
- A - B - C - D - remote HEAD
\
E - F - G - local HEAD
Après un merge :
- A - B - C - D - remote HEAD
\ \
E - F - G - local HEAD - new local HEAD
Après un rebase :
Squashing
Permet de regrouper plusieurs commits successifs d’une branche
avant un merge.
git merge –squash
git pull –squash
Squashing et Rebasing : simplifier le graphe de commits pour
laisser le dépôt principal propre et lisible (anyway, toujours suivre la
politique de l’entreprise si définie)
Stash (stash)
Et bien d’autres...
Attention
Outline
2 Git
Architecture
Commandes de base
Outils et pratique au quotidien
Outils graphiques
Outils graphiques
Outils graphiques
Outils en ligne
Plateformes d’hébergement
GitLab, FusionForge, etc.
Offre souvent beaucoup d’autres services : sites web, wiki, mailing
lists, forums, bugtrackers, gestion des releases etc.
Organisation du travail
Organisation du travail
Organisation du travail
Organisation du travail
Organisation du travail
Github Workflow
Outline
2 Git
Architecture
Commandes de base
Outils et pratique au quotidien
Besoins
Besoins
Production logicielle
Besoin d’automatisation :
Raccourcir les cycles de développement (points 6,7,8, voire 9)
(SDLC automation ”Software Development Life Cycle”)
Éviter les fautes, pouvoir corriger rapidement
Dégager du temps utile
Procédés actuels : intégration continue ”CI” (voire même livraison
continue ”CD”). Similaire à la production industrielle en flux tendu.
L’intégration continue
Procédure automatique
Exemples d’outils de CI
GitLab
Fonctionnalités de GitLab
Dépôt git (of course) avec inferface web, mais pas que
Outils collaboratif : gestion des membres, Mattermost
(slack-like), revue de code, etc.
Outils de suivi : gestion des tickets, des versions, des releases,
bug tracker, statistiques, etc.
Outils de CI : recettes Docker, routines et tests automatiques,
etc.
Outils pour la communauté : pages web, wiki
Voir https://about.gitlab.com/features/
Quelques liens
Généraux :
http://git-scm.com/
http://git-lectures.github.io/
https://guides.github.com/introduction/flow/
https://git.wiki.kernel.org/
https://www.miximum.fr/blog/enfin-comprendre-git/
Questions spécifiques :
https://www.quora.com/How-does-Git-merge-work
https://www.miximum.fr/blog/git-rebase/
http://clubmate.fi/
git-dealing-with-branches-merging-and-rebasing/
https://www.atlassian.com/git/tutorials/
resetting-checking-out-and-reverting/
Mémos :
http://ndpsoftware.com/git-cheatsheet.html
http://gitref.org/
Tutos :
http://try.github.io/levels/1/challenges/1
https:
//blog.udemy.com/git-tutorial-a-comprehensive-guide/
http://gitimmersion.com/
gittutorial et gittutorial-2(man page)
References