Les bases du versionning avec git

par François LASSERRE

Les bases du versionning avec git

  • Qu'est-ce que la gestion de version ?
  • L'histoire de git
  • Configuration de git
  • Les bases de git
  • Créer des dossiers avec git
  • Ignorer des fichiers avec git
  • La gestion des branches avec git
  • Liens utiles

Qu'est-ce que la gestion de version ?

Version Control System

 

  • Enregistre l'évolution de fichiers dans le temps
  • Permet le retour à un état enregistré
  • Outil collaboratif

Le dépôt

Repository

 

  • Espace de stockage
  • Organisé
  • Enregistre des versions

Les systèmes de gestion de versions centralisés (CVCS)

Systèmes Centralisés : CVS, Subversion

  • Un seul dépôt
     
  • Sans connexion au réseau pas de modifications
     
  • Pas sécurisé (en cas de défaillance système)

Les systèmes de gestion de version distribués (DVCS)

Systèmes distribués : git, Mercurial, Bazaar

  • Pas dépendant d'une seule machine en cas de défaillance
     
  • Travail hors ligne
     
  • Opérations rapides car en local
     
  • Clonage long car on récupère tout l'historique et pas qu'une version

L'histoire de git

 

  • git est né avec une dose de destruction créative et de controverse houleuse.
  • Le noyau Linux est un projet libre de grande envergure. Entre 1991 et 2002, les modifications étaient transmises sous forme de patchs et d’archives de fichiers.
  • En 2002, le projet du noyau Linux commença à utiliser un DVCS propriétaire appelé BitKeeper.
  • En janvier 2005, Bitkeeper annonce la fin de gratuité de l’outil à partir de juillet 2005.
  • Linus Torvald décide donc de créer son propre outil et publie une première version de git le 8 avril 2005.

git ?

"git" can mean anything, depending on your mood.

Pour en savoir plus voir le premier commit de git sur github :

https://github.com/git/git/tree/e83c5163316f89bfbde7d9ab23ca2e25604af290

Configuration de git

git Config

 

  • Fichier .gitconfig
  • Données personnelles (nom, e-mail, clé gpg)
  • Préférences (éditeur texte, outil de différences)
  • Alias
  • Couleurs
  • etc…

Création d'un fichier .gitconfig

 

$ git config --global user.name "François LASSERRE"
$ cat ~/.gitconfig
[user]
	name = François LASSERRE
$ git config --global user.email "contact@francoislasserre.fr"
$ cat ~/.gitconfig
[user]
	name = François LASSERRE
	email = contact@francoislasserre.fr

Configuration de l'éditeur de texte

$ git config --global core.editor vim
$ cat ~/.gitconfig
[user]
	name = François LASSERRE
	email = contact@francoislasserre.fr
[core]
	editor = vim

Création d'alias de commandes

$ git config --global alias.br branch
$ cat ~/.gitconfig                         
[user]
	name = François LASSERRE
	email = contact@francoislasserre.fr
[core]
	editor = vim
[alias]
	br = branch
	co = checkout
$ git config --global alias.co checkout

Les bases de git

États d'un fichier

indexé

modifié

non modifié

non indexé

Ajout du fichier dans le dépôt

Ajout d'un fichier

$ git add README.md
$ git status
Sur la branche master
Modifications qui seront validées :
  (utilisez "git reset HEAD <fichier>..." pour désindexer)

	nouveau fichier : README.md

États d'un fichier

indexé

modifié

non modifié

non indexé

Ajout du fichier dans le dépôt

Commit du fichier

Commit d'un fichier

Add file README.md
# Veuillez saisir le message de validation pour vos modifications. Les lignes
# commençant par '#' seront ignorées, et un message vide abandonne la validation.
# Sur la branche master
# Modifications qui seront validées :
#       nouveau fichier : README.md
#
$ git commit
$ git commit
[master 0d147cb] Add file README.md
 1 file changed, 2 insertions(+)
 create mode 100644 README.md

États d'un fichier

indexé

modifié

non modifié

non indexé

Édition du fichier

Commit du fichier

Édition d'un fichier

$ git status
Sur la branche master
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é :         README.md

aucune modification n'a été ajoutée à la validation
(utilisez "git add" ou "git commit -a")
$ echo "test" >> README.md

États d'un fichier

indexé

modifié

non modifié

non indexé

Édition du fichier

Index du fichier

Indexer le fichier

$ git status
Sur la branche master
Modifications qui seront validées :
  (utilisez "git reset HEAD <fichier>..." pour désindexer)

	modifié :         README.md
$ git add README.md

Commit du fichier

$ git commit
Add text "test"
# Veuillez saisir le message de validation pour vos modifications. Les lignes
# commençant par '#' seront ignorées, et un message vide abandonne la validation.
# Sur la branche master
# Modifications qui seront validées :
#       nouveau fichier : README.md
#
$ git commit
[master d8dcbdd] Add text "test"
 1 file changed, 1 insertion(+)

Historique

$ git log
commit d8dcbdd1641a460aab46809bf1546606c1ab4cb3
Author: François LASSERRE <contact@francoislasserre.fr>
Date:   Mon Jul 25 22:30:28 2016 +0200

    Add text "test"

commit 0d147cb2c53931dd95e248eb84fa130fc609714f
Author: François LASSERRE <contact@francoislasserre.fr>
Date:   Mon Jul 25 22:29:17 2016 +0200

    Add file README.md

Créer des dossiers avec git

Créer des dossiers avec .gitkeep

$ ls -ap
./  ../  .git/  README.md
$ git status
Sur la branche master
rien à valider, la copie de travail est propre
$ mkdir logs

Créer des dossiers avec .gitkeep

$ touch logs/.gitkeep
$ git status
Sur la branche master
Fichiers non suivis:
  (utilisez "git add <fichier>..." pour inclure dans ce qui sera validé)

	logs/

aucune modification ajoutée à la validation mais des fichiers non suivis 
sont présents (utilisez "git add" pour les suivre)
$ git add logs/

Créer des dossiers avec .gitkeep

$ git status
Sur la branche master
Modifications qui seront validées :
  (utilisez "git reset HEAD <fichier>..." pour désindexer)

	nouveau fichier : logs/.gitkeep
$ git commit -m "Add .gitkeep file"
[master 003963f] Add .gitkeep file
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 logs/.gitkeep

Ignorer des fichiers avec git

Ignorer des fichiers

$ touch logs/access.log
$ git status
Sur la branche master
Fichiers non suivis:
  (utilisez "git add <fichier>..." pour inclure dans ce qui sera validé)

	logs/access.log

aucune modification ajoutée à la validation mais des fichiers non suivis
sont présents (utilisez "git add" pour les suivre)
$ echo "logs/*.log" > .gitignore
$ git add .gitignore
$ git commit -m "add .gitignore file"
$ git status
Sur la branche master
rien à valider, la copie de travail est propre

Ignorer des dossiers

$ mkdir logs/2016/
$ git status
Sur la branche master
Fichiers non suivis:
  (utilisez "git add <fichier>..." pour inclure dans ce qui sera validé)

	logs/2016/access.log

aucune modification ajoutée à la validation mais des fichiers non suivis
sont présents (utilisez "git add" pour les suivre)
$ echo "logs/*" >> .gitignore
$ git status
Sur la branche master
rien à valider, la copie de travail est propre
$ touch logs/2016/access.log

La gestion des branches avec git

Création d'une branche

$ git branch mybranch
$ git branch
* master
  mybranch
$ git checkout mybranch
Basculement sur la branche 'mybranch'
$ git branch
  master
* mybranch
$ git checkout -b mybranch
Basculement sur la nouvelle branche 'mybranch'

Alternative

Faire un commit sur la branche

$ touch mybranch.txt
$ git add mybranch.txt
$ git commit -m "add mybranch.txt"
$ git log --decorate
commit 5dba86943e91c369a6e2665e870d82e1b448cca2 (HEAD -> mybranch)
Author: François LASSERRE <contact@francoislasserre.fr>
Date:   Tue Jul 26 06:51:26 2016 +0200

    add mybranch.txt

commit 003963fe03e9755bafe58897b0bc3f4e4703f4fa (master)
Author: François LASSERRE <contact@francoislasserre.fr>
Date:   Tue Jul 26 06:48:22 2016 +0200

    Add .gitkeep

Mettre à jour la branche

$ git checkout master
$ git log --decorate
commit 003963fe03e9755bafe58897b0bc3f4e4703f4fa (master)
Author: François LASSERRE <contact@francoislasserre.fr>
Date:   Tue Jul 26 06:48:22 2016 +0200

    Add .gitkeep
$ git merge mybranch
Mise à jour 003963f..5dba869
Fast-forward
 mybranch  | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 mybranch.txt

Vérification avec l'historique

$ git log --decorate
commit 5dba86943e91c369a6e2665e870d82e1b448cca2 (HEAD -> master, mybranch)
Author: François LASSERRE <contact@francoislasserre.fr>
Date:   Tue Jul 26 06:51:26 2016 +0200

    add mybranch.txt

commit 003963fe03e9755bafe58897b0bc3f4e4703f4fa (master)
Author: François LASSERRE <contact@francoislasserre.fr>
Date:   Tue Jul 26 06:48:22 2016 +0200

    Add .gitkeep

Idées de présentations git

 

  • Création d'un dépôt local + github
    (git init, git clone, git remote add…)
     
  • Utilisation des remotes
    (git fetch, git pull, git push…)
     
  • Voir les différences, auteurs, branches via les logs
    (git diff, git blame, git log --graph…)

Les bases du versionning avec git

By choiz

Les bases du versionning avec git

Les bases du versionning avec git par François LASSERRE

  • 1,938