Git est un logiciel de gestion de versions décentralisé qui vous permettra de gérer la vie d'un code informatique. Il permet une stratégie de backup, de gérer des versions et de stocker tout l'historique des modifications apportées à un projet informatique.
Découvrez les principes et fonctionnalités essentielles de git. Soyez prêts à travailler en 3 heures.
La dernière version est disponible en téléchargement direct à cette adresse : http://giant-teapot.org/uploads/tutorials/git_tutorial.pdf
Diaporama pour la formation git réalisée pour l'association Atilla, septembre 2012.
Git est un logiciel de gestion de versions décentralisé qui vous permettra de gérer la vie d'un code informatique. Il permet une stratégie de backup, de gérer des versions et de stocker tout l'historique des modifications apportées à un projet informatique.
Découvrez les principes et fonctionnalités essentielles de git. Soyez prêts à travailler en 3 heures.
La dernière version est disponible en téléchargement direct à cette adresse : http://giant-teapot.org/uploads/tutorials/git_tutorial.pdf
Diaporama pour la formation git réalisée pour l'association Atilla, septembre 2012.
Cette formation présente les élements de base pour maîtriser git/gitLab. Elle contient aussi des astuces et de bonnes pratiques pour mieux utiliser git.
http://articles.nissone.com/2014/11/gitpourlanulle/
Je comprenais mal Git, m’emmêlais dans les notions de branches, de fork et de commit. J’ai demandé des explications à Julien. J’ai mis ça en images et avec mes mots. Je vous le partage (CC by SA), des fois que ça vous serve aussi.
Une introduction à git, présentée par Yann Sionneau aux membres de l'association MiNET et du club INTech.
La qualité du lecteur PDF sur slideshare laissant à désirer, je vous invite à télécharger le PDF plutôt que de le lire sur le site.
Git et rebase sont-ils équivalents ? Dans quels cas utiliser l'un ou l'autre ? Nous verrons que chacun a son utilité dans la gestion de branches et l'amélioration de l'historique.
Cette formation présente les élements de base pour maîtriser git/gitLab. Elle contient aussi des astuces et de bonnes pratiques pour mieux utiliser git.
http://articles.nissone.com/2014/11/gitpourlanulle/
Je comprenais mal Git, m’emmêlais dans les notions de branches, de fork et de commit. J’ai demandé des explications à Julien. J’ai mis ça en images et avec mes mots. Je vous le partage (CC by SA), des fois que ça vous serve aussi.
Une introduction à git, présentée par Yann Sionneau aux membres de l'association MiNET et du club INTech.
La qualité du lecteur PDF sur slideshare laissant à désirer, je vous invite à télécharger le PDF plutôt que de le lire sur le site.
Git et rebase sont-ils équivalents ? Dans quels cas utiliser l'un ou l'autre ? Nous verrons que chacun a son utilité dans la gestion de branches et l'amélioration de l'historique.
Git is a distributed version control system, created by Linus Torvalds, and used worldwide by many software developers for a large number of well known software projects.
In this presentation, I explain the fundamentals of the Git software and some of its internal workings and related terminology. The target audience is individuals who have used Git before in a limited capacity and want expand their knowledge of the software to improve their daily use of it. The presentation could also be useful for those with knowledge of Git and a desire to improve their understanding of some of the more technically elements.
Git in gear: How to track changes, travel back in time, and code nicely with ...fureigh
Presented at NYCCamp 2014 on April 10, 2014 as a basic introduction to Git and version control.
(Previous versions presented at NYCCamp 2013 and at DrupalCampNYC 10 on December 10, 2011.)
Original session description:
Ever made a mistake and wished for the power to turn back time? In this session you'll experience the magical world of version control, where you can try out massive code changes without worrying that you'll break your entire site, where you can have access to different versions of your code without saving tons of copies with elaborate naming schemes, and where you can collaborate with others without ever again having to utter the phrase, "Okay, I've finished working on styles.css, so you can go ahead and make your changes now."
This will be a play-along crash course on Git, the version control system that Drupal.org developers (and lots of other people) use to share code with one another and save themselves time and misery.
We'll start with fundamental commands, trying them out along the way. By the end of the session you'll have mastered a simple daily workflow that you'll be able to start using immediately. Plus, you'll leave with a cheat sheet and resources for future reference.
This session will include:
– Why use version control?
– Why use Git?
– How to use Git repositories on Drupal.org
– Fundamental commands
– A simple daily workflow
– How to turn back time when something goes wrong
– How to use Git to experiment safely
– How to see who did what when and review changes
And a bonus round, if time allows:
– How to use Git on a team (or with a remote repository) that's using SVN
– Additional resources/Where to learn more
If you've been meaning to get around to learning Git, now's the time!
Ever had a hard time managing your source code and collaborating with others? Fear no more. This session will teach you the fundamentals of the version control system git, as well as some good practices of working with git. If you do it right, reading the history of your code will be a bliss!
How to store large binary files in git repositoriesMatt Aunger
Storing large binary files in Git repositories seems to be a bottleneck for many Git users. Because of the decentralized nature of Git, changes in large binary files cause Git repositories to grow by the size of the file in question every time the file changes are committed. This growth directly affects the amount of data end users need to retrieve when they need to clone the repository.
Luckily there are multiple 3rd party implementations that will try to solve the problem, many of them using similar paradigm as a solution. Here are seven alternative approaches for handling large binary files in Git repositories.
UX, ethnography and possibilities: for Libraries, Museums and ArchivesNed Potter
These slides are adapted from a talk I gave at the Welsh Government's Marketing Awards for the LAM sector, in 2017.
It offers a primer on UX - User Experience - and how ethnography and design might be used in the library, archive and museum worlds to better understand our users. All good marketing starts with audience insight.
The presentation covers the following:
1) An introduction to UX
2) Ethnography, with definitions and examples of 7 ethnographic techniques
3) User-centred design and Design Thinking
4) Examples of UX-led changes made at institutions in the UK and Scandinavia
5) Next Steps - if you'd like to try out UX at your own organisation
Depuis quelques années Git s'est imposé comme le système de gestion de sources de référence. Simple, rapide , souple, il convient à la fois aux workflows traditionnels et aux workflows distribués. Après une introductions aux principes fondateurs de Git le stagiaire aura l'occasion d'apprendre à créer son premier repository git et à le manipuler localement avant de le partager avec les autres. La formation insistera sur la gestions des branches et la résolution des conflits et sur les commandes permettant d'aborder ces problématiques sereinement. A l'issue de cette formation le stagiaire sera autonome pour utiliser Git aussi bien individuellement qu'au sein d'une équipe.
Cette présentation montre plusieurs outils gratuits qui peuvent être utilisés pour gérer plusieurs aspects de la gestion de projets, en particulier informatique, de manière collaborative. On y voit comment versioner son code avec Git, déployer son code avec Heroku, tester son code avec Travis, gérer et planifier son temps et ses tâches avec Trello, FreedCamp et Tom'splanner, comment communiquer avec Slack et comment rédiger sa documentation avec Read the Docs.
3. About me
Abderrazak BOUADMA
Software Engineer at SFEIR
Google Cloud Expert
Technical Lead At Accor since November 2015
JUG Leader, VoxxedDays/Devoxx4Kids Organizer
5. Brief History
• GNU RCS (Revision Control System) ~1982
• SCCS Source Code Control System 1986-89
• CVS Concurrent Versions System 1990 (Client/Server, CLI, GUI)
• SVN (Apache Subversion) 2000
1. Atomic Commits
2. renaming & moving files doesn’t destroy history
3. folders & meta-data are also processed
4. A unique revision ID for all the repository
6. Brief History
• Created by Linus Torvalds to handle the integration workflow of the Linux kernel
integrations (more than 20 million lines of code)million de lignes de code)
• Replaces BitKeeper
• Must be efficient
• Simplified & distributed architecture
• helps to have a parallel development process
• handles large projects
• has no dependency to any sub-system (DB, Bus, etc.)
• You’ll be happy at the end of the day … almost :)
8. Fundamentals
To install the latest and greatest version)
https://git-scm.com/download
for a windows installation
https://git-for-windows.github.io
Graphical UIs
How to install p4merge
Installation
10. Fundamentals
$ git init #creates a local repository at the root folder
$ git status #affiche l’état du working copy et la staging area
$ git add #ajout de fichiers à l’index (staging area)
$ git rm —cached #unstage un nouveau fichier
$ git commit #commit le fichier dans le repository
Main Git Commands
12. Fundamentals
• Commit : ensemble cohérent de modifications
• Working Copy : contient les modifications en cours
• Staging area (index) : liste des modifications effectuées dans le working copy qu’on
veut inclure dans le prochain commit
• Repository : ensemble des commits du projet (branchs, tags, etc.)
Core definitions
13. Fundamentals
WORKSPACE (t)
Here where you
create/modify/delete/
move your
documents.
Here where HEAD
points to
INDEX
(STAGING
AREA)
Here where
you stage
your files
for next
commit
UPSTREAM
REPOSITORY
STASH LOCAL
REPOSITORY
Here where all
commits are stored
git add git commit git push
14. Fundamentals
WORKSPACE (t)
Here where you
create/modify/delete/
move your
documents.
Here where HEAD
points to
INDEX
(STAGING
AREA)
Here where
you stage
your files
for next
commit
UPSTREAM
REPOSITORY
STASH LOCAL
REPOSITORY
Here where all
commits are stored
HEAD points on
this area which is
a view of your
work at time t
Also contains
your .git folder
16. Fundamentals
INDEX
(STAGING
AREA)
Here where
you stage
your files
for next
commit
Here where you
prepare your work
(staging) to be
committed
Shared between
all branches
WORKSPACE (t)
Here where you
create/modify/delete/
move your
documents.
Here where HEAD
points to
HEAD points on
this area which is
a view of your
work at time t
Also contains
your .git folder
17. Fundamentals
The staging area is a file, generally contained in your Git directory,
that stores information about what will go into your next commit.
It’s sometimes referred to as the “index”, but it’s also common to refer to it
as the staging area.
index (staging area)
18. Fundamentals
LOCAL
REPOSITORY
Here where all
commits are stored
All commits are
stored here
The only way to
share/retrieve
external work
The only way to
share/retrieve
external work
INDEX
(STAGING
AREA)
Here where
you stage
your files
for next
commit
Here where you
prepare your work
(staging) to be
committed
Shared between
all branches
19. Fundamentals
$ git init #creates a local repository at the root folder
$ git clone URL # get a copy of an existing repository (distant)
Repository
20. Fundamentals
UPSTREAM
REPOSITORY
STASH LOCAL
REPOSITORY
Here where all
commits are stored
All commits are
stored here
The only way to
share/retrieve
external work
The only way to
share/retrieve
external work
This is your
REMOTE
repository (On
premises, github,
etc)
Here where you
can (stack)
temporary work
for later
21. Fundamentals
Stash : a stack where you can save temporary staged worked for later processing
$ git stash # store your data
$ git stash apply # restore your saved work
Remote Repository : your team(s) shared repository where all the work meet.
$ git push # share your work others
$ git pull # retrieve the work of others
Stash & remote
22. Fundamentals
un commit doit :
• Dans les faits, c’est un pointeur
• Connait son ou ses parents
• possède un identifiant unique SHA1
il doit :
• compiler
• fonctionner
• signifier quelque chose (feature, bug fix, etc.)
Commit
25. Usual Situations & Actions
$ git log [-n] [-p] [—oneline]
# affiche les IDs des commits, les messages et les modifications
# -n : limit à n commits
# -p : affiche le diff avec le commit précédent
# —oneline : affiche uniquement le début de l’ID du commit et le comment
sur une seule ligne
$ git diff
# git diff id_commit : diff entre working copy et commit
# git diff id_commit1 id_commit2 : diff entre deux commits
Commit
26. Usual Situations & Actions
# id_commit^ : parent du commit
# id_commit^^ : grand-parent du commit
# id_commit~n : n-ième parent du commit
# id_commit^2 : deuxième parent du commit (merge)
# id_commit1..id_commit2 : variations entre commit 1 et commit 2
git log
Ancêtres et références
27. TP
• Créer un nouveau repository
• Ajouter un fichier et commiter
• Modifier le fichier et commiter
• Observer l’historique (on doit voir les deux commits)
• comparer des commits
TP #1
29. Branches
Déviation par rapport à la route principale
• Permet le développement de différentes versions en parallèle (en cours, feature, fix,
etc)
• On parle de “merge” lorsque tout ou partie des modifications d’une branche sont
rapatriées dans une autre.
• On parle de “feature branch” pour une branche dédiée au développement d’un
fonctionnalité nouvelle.
Branches
30. Branches
• branch : pointeur sur le dernier commit (sommet) de la branche
• les branches sont de références
• master : branche principale (trunk)
• HEAD : pointeur sur la position actuelle de la working copy
Branches
32. Branches
Les branches sont des références vers les commit du sommet de la
branche, on peut donc utiliser les notations ^ou ~ sur la branche
branch1^^ : le grand-père du commit au sommet de la branche 1
on peut aussi le faire sur un tag
Branches (Ancêtres et
Références)
33. Branches
La commande checkout permet de déplacer HEAD sur une autre référence :
(branche, tag, commit …)
$ git checkout <ref> : checkout une référence
$ git checkout -b <branch> : crée une branche et la checkout
Checkout
34. Branches
Permet de déplacer le sommet d’une branche sur un commit particulier,
en “resettant” éventuellement l’index et la working copy
utilisations principales :
● annuler les modifications en cours sur la working copy
● faire “reculer” une branche
● annuler un ou plusieurs derniers commits
Reset
35. Branches
$ git reset [MODE] [COMMIT ID]
$ git reset --soft [COMMIT ID]
Does not touch the index file or the working tree at all (but resets the head to <commit>, just like all modes do). This
leaves all your changed files "Changes to be committed", as git status would put it.
$ git reset --hard [COMMIT ID]
Resets the index but not the working tree (i.e., the changed files are preserved but not marked for commit) and reports
what has not been updated. This is the default action.
$ git reset --mixed [COMMIT ID]
Resets the index and working tree. Any changes to tracked files in the working tree since <commit> are discarded.
Reset
36. Branches
Littéralement “étiquette” → permet de marquer / retrouver une version précise du
code source
● git tag -a nom_du_tag -m “message” : crée un tag
● git tag -l : liste les tags
C'est une référence vers un commit
On peut faire un checkout sur un tag (comme une branche ou un commit) → detached
HEAD
Les tags sont des références vers un commit on peut donc utiliser les notations ^ ou ~ pour
un checkout :
$ git checkout mon_tag^^ : on checkout le grand-père du commit du tag (detached
head)
Tag
37. TP
● Créer un nouveau repository Git
● Ajouter un fichier et le commiter
● Ajouter un deuxième fichier et le commiter
● Vérifier l’historique (on doit avoir 2 commits)
● Faire des modifications sur le deuxième fichier et le commiter
● Annuler les modifications du dernier commit
● Vérifier l’historique (on doit avoir 2 commits)
● Créer une branche à partir du 1er commit
● Faire un commit sur la branche
● Vérifier l’historique de la branche (on doit avoir 2 commits)
● Lister les branches (on doit avoir 1 branche)
● Tagger la version
● Revenir au sommet de la branche master
● Lister les tags (on doit avoir un tag)
● Supprimer la branche
● Lister les branches (on doit avoir une seule branche : master)
TP #2
42. Branches (TP)
TP #3
Merge
● Créer un nouveau repository git
● Ajouter un fichier et le commiter (C1)
● Créer une feature branch B1 à partir de C1
● Faire une modification du fichier et commiter (C2)
● Merger B1 dans master de manière à avoir un commit de merge dans master
Rebase
● Créer un nouveau repository Git
● Ajouter un fichier et le commiter (C1), le modifier et le commiter (C2)
● Créer une branche B1 à partir de C1
● Faire une modification du fichier et commiter C3
● Merger B1 dans master de manière à avoir un historique linéaire
43. Branches (TP)
TP #4
● Créer un nouveau repository Git
● Ajouter un fichier et le commiter (C1)
● Modifier la première ligne du fichier et commiter (C2)
● Créer une feature branch B1 à partir de C1
● Faire une modification de la première ligne du fichier et commiter (C3)
● Merger B1 dans master en résolvant les conflits
46. Working with remote repository
Remote
Utilisations d’un repository distant :
● Pour partager son travail via un repository central (ex svn / cvs ...)
● Repository read only qu’on peut forker (ex : github)
● Pour déployer son code (ex: heroku)
● Dans Git chaque repository peut être “cloné” (copié) Le repository cloné devient
de fait le repository distant du clone
47. Working with remote repository
Clone
Clone complet du repository distant
branches, tags → tout est cloné
le repository distant peut être exposé via ssh, http, file ...
$ git clone url_du_repository
48. Working with remote repository
Remote (origin)
● C'est la définition d'un repository distant
● Nom + url du repository
● git remote add url_du_repo : ajoute une remote
● Créée par défaut avec clone
● Remote par défaut == origin
49. Working with remote repository
Fetch
$ git fetch [<remote>]
● Met à jour les informations d'une remote
● récupère les commits accessibles par les branches distantes référencées
● met à jour les références des branches distantes
● ne touche pas aux références des branches locales
50. Working with remote repository
Pull
$ git pull
● Equivalent de fetch + merge remote/branch
● Update la branche locale à partir de la branche remote
● Se comporte comme un merge d’une branche locale dans une autre
51. Working with remote repository
Fetch + rebase
$ git fetch
$ git rebase <-i>
● Permet de récupérer les modifications de la remote et de placer les nôtres “au
dessus”
● Plus “propre” que pull → pas de commit de merge
● Se comporte comme un rebase d’une branche locale sur une autre
● Équivalent à $ git pull --rebase (configurable par défaut)
52. Working with remote repository
Push
$ git push
● Publie les commits locaux sur le repository distant
● git status → donne le nombre de commit d'avance / de retard sur la remote
● Refuse de pusher si retard → faire un git fetch puis git rebase -p et
recommencer
53. Working with remote repository
Push
● Par défaut publie tous les commits de la branche courante non présents sur la remote
● On peut publier jusqu'à un commit via :
$ git push nom_remote id_commit:nom_branche_remote
54. Working with remote repository
Push
$ git push -f : force
execute le push même en cas d’historique divergent : notre historique “remplace” celui du
repository distant !!!
Utile pour corriger une erreur de push avant que les autres users n’aient récupéré les
changements
Attention nécessite des interventions de la part des autres utilisateurs s’ils ont updaté
leur repository avant le push -f (ils risquent de merger l’ancien et le nouvel historique)
On préfère généralement faire un revert
57. Pull/Merge request
Pull request
Generate a request asking your upstream project to pull changes into their tree. The
request, printed to the standard output, begins with the branch description, summarizes the
changes and indicates from where they can be pulled.
62. Handy commands
Stash
Sauvegarder sa working copy sans commiter (ex : pour un changement de branche
rapide)
$ git stash
Déplace le contenu de la working copy et de l’ index dans une stash
$ git stash list
list des stash
$ git stash pop [stash@{n}]
pop la dernière stash (ou la n-ième)
63. Handy commands
Cherry-pick
$ git cherry-pick id_du_commit
● Prend uniquement les modifications d'un commit (sans historique) et l'applique à la
branche
● A utiliser avec parcimonie (branches sans liens)
65. Scenarios
BugFix
● Je suis sur master (sinon git checkout master)
● Je fais mon commit : ajout des fichiers dans l'index via git add puis git commit -m
“mon commit”
● Je récupère les modifications des autres en rebasant master : git fetch && git
rebase :
● Je résous les éventuels conflits puis git rebase -- continue (ou git rebase --abort)
● Mes modifications se retrouvent au sommet de master
● Je publie mon (ou mes) commit(s) : git push
66. Scenarios
Nouvelles fonctionalités
● Exemple : nouvel écran, nouveau batch → plusieurs commits
● Je mets à jour master : git fetch && git rebase
● Je crée et je me place sur ma feature branch : git checkout -b nouvel_ecran
● Je fais mon développement et plusieurs commits sur ma branche
● Je me place sur master et je fais git fetch && git rebase
● Je merge ma branche dans master (sans fast forward) : git merge - no-ff
nouvel_ecran
● Je publie : git push
● Cas particulier : quelqu'un a pushé entre mon merge et mon push → je dois refaire
un git fetch && git rebase -p sinon le rebase va linéariser mon merge
● Je supprime ma feature branch : git branch -d nouvel_ecran
67. Scenarios
Fix en Prod
● Je me place sur la branche de prod : git checkout prod-1.10
● Je mets à jour ma branche locale de prod : git fetch && git rebase
● Je fais ma correction et je commite
● Je mets à jour ma branche local de prod : git fetch && git rebase (conflits
éventuels)
● Je publie mon commit : git push
● Je me place sur master pour reporter ma modification :
● Je mets à jour master : git fetch && git rebase
● Je merge ma branche de prod dans master : git merge prod-1.10
● Dans des cas TRES particuliers (on ne veut qu'un seul commit sans les
précédents) on peut faire un cherry-pick plutôt qu'un merge
● Je publie mon report de commit : git push
68. Scenarios
Création branch de prod
Je me place sur le tip (sommet de la branche) de master (ou sur le commit qui
m'intéresse)
$ git checkout master
Je crée ma branche locale et je l'emprunte :
$ git checkout -b prod-1.10
Je push ma branche :
$ git push -u origin prod- 1.10
69. Scenarios
Références
La cheatsheet http://ndpsoftware.com/git-cheatsheet.html
La documentation https://www.kernel.org/pub/software/scm/git/docs/
Le livre Pro Git http://git-scm.com/book/
Le site Git Magic http://www-cs-students.stanford.edu/~blynn/gitmagic/intl/fr/
Les tutoriels Atlassian https://www.atlassian.com/fr/git/tutorial/
Les articles GitHub https://help.github.com
Simulation graphique des commandes http://pcottle.github.io/learnGitBranching
Code Academy GTI course https://www.codecademy.com