SlideShare une entreprise Scribd logo
1  sur  35
Télécharger pour lire hors ligne
Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons
Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés
DCLL - Partie III
Git - concepts clés
UPS, Master Informatique M1
UE14
Franck Silvestre
1
Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons
Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés
Développement collaboratif
Développer de manière collaborative, c’est travailler à
plusieurs sur la même base de code pour produire un
logiciel
2
Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons
Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés
Version Control System
• Gestion de version de code de source
• Permet de gérer les changements sur le code source
• Prise en compte des modifications provenant de plusieurs
contributeurs
• Révision : un lot de changements reportés par un
contributeur induit une nouvelle version du code source
• Possibilité de retrouver à tout moment le code source
correspondant à une révision donnée
3
Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons
Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés
VCS - Concepts clés
• Repository / dépôt
- réceptacle du code source : versions passée et en cours
• 3 modèles d’architecture
- modèle local
- modèle centralisé
- modèle distribué
Utilisable dans le cadre d’un
développement collaboratif
4
Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons
Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés
Modèle architecture centralisée
Serveur
Sur un serveur central
Poste de développement m
Fichiers
Chaque développeur travaille sur
une copie locale des fichiers
Poste de développement 1
Fichiers ...
Fichiers
Révision 1
Fichiers
Révision n
...
Repository
5
Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons
Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés
Modèle architecture distribuée
Serveur
Sur un serveur central
Poste de développement m
Fichiers
Chaque développeur travaille sur une
copie locale des fichiers et dispose
d'un mirroir du repository
Poste de développement 1
Fichiers
...
Fichiers
Révision 1
Fichiers
Révision n
...
Repository
Fichiers
Révision 1
Fichiers
Révision n
...
Repository
Fichiers
Révision 1
Fichiers
Révision n
...
Repository
6
Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons
Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés
Modèle distribué
• Avantages
- Modèle plus tolérant aux pannes
• si le serveur tombe, le repository n’est pas perdu
- Modèles organisationnels plus riches
• modèles de repositories hiérarchiques
• Inconvénient
- Temps de prise en main un peu plus long
7
Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons
Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés
Git
• Développement collaboratif du noyeau Linux
- changement de politique commerciale de BitKeeper
- création d’un nouvel outil s’impose
• Avril 2005 : 1er commit de Linus Thorvald
6,7 millions de lignes
de code !
8
Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons
Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés
Projets utilisant Git
• Git
• Noyau Linux
• Perl
• Eclipse
• Gnome
• KDE
• Qt
• Ruby On Rails
• Android
• PostgreSQL
• Debian
• X.org
• Grails
• ...
9
Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons
Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés
Git - Installation
• Linux
- distributions binaires Debian/Ubuntu/...
sudo apt-get install git-core git-doc git-gui
- distributions binaires Redhat/fedora/cent-os
sudo yum install git-all
- distribution à partir des sources
• Windows
- cygwin
- msysgit (recommandé)
• Mac OS X
- git-osx-installer
- à partir des sources
10
Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons
Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés
Git en ligne de commande
git
usage: git [--version] [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
[-p|--paginate|--no-pager] [--no-replace-objects] [--bare]
[--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
[-c name=value] [--help]
<command> [<args>]
The most commonly used git commands are:
add Add file contents to the index
bisect Find by binary search the change that introduced a bug
branch List, create, or delete branches
checkout Checkout a branch or paths to the working tree
clone Clone a repository into a new directory
commit Record changes to the repository
diff Show changes between commits, commit and working tree, etc
fetch Download objects and refs from another repository
grep Print lines matching a pattern
init Create an empty git repository or reinitialize an existing one
log Show commit logs
merge Join two or more development histories together
mv Move or rename a file, a directory, or a symlink
pull Fetch from and merge with another repository or a local branch
push Update remote refs along with associated objects
rebase Forward-port local commits to the updated upstream head
reset Reset current HEAD to the specified state
rm Remove files from the working tree and from the index
show Show various types of objects
status Show the working tree status
tag Create, list, delete or verify a tag object signed with GPG
See 'git help <command>' for more information on a specific command.
11
Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons
Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés
Git configuration
git config --global user.name "Franck Silvestre"
git config --global user.email "franck.silvestre@irit.fr"
git config --global color.ui "auto"
git config --global -l
user.name=Franck Silvestre
user.email=franck.silvestre@irit.fr
color.ui=auto
Pas de commit possibles si pas
d’identité !
12
Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons
Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés
Premiers projet Git
git init MonProjet
Initialized empty Git repository in /Users/fsil/10_Dev/Other/Bacasable/MonProjet/.git/
mkdir MonProjet2
cd MonProjet2/
git init
Initialized empty Git repository in /Users/fsil/10_Dev/Other/Bacasable/MonProjet2/.git/
On peut intialiser le repository
Git sur un projet existant !
13
Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons
Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés
Création de fichiers dans le projet
MonProjet fsil$ groovy ../createFiles
MonProjet fsil$ ls
Fichier_0.txt! Fichier_2.txt! Fichier_4.txt! Fichier_6.txt! Fichier_8.txt
Fichier_1.txt! Fichier_3.txt! Fichier_5.txt! Fichier_7.txt! Fichier_9.txt
MonProjet fsil$ git status
# On branch master
#
# Initial commit
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
#! Fichier_0.txt
#! Fichier_1.txt
#! Fichier_2.txt
#! Fichier_3.txt
#! Fichier_4.txt
#! Fichier_5.txt
#! Fichier_6.txt
#! Fichier_7.txt
#! Fichier_8.txt
#! Fichier_9.txt
nothing added to commit but untracked files present (use "git add" to track)
14
Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons
Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés
Ajout des fichiers dans «l’aire d’embarquement»
MonProjet fsil$ git add Fichier_0.txt
MonProjet fsil$ git add Fichier_1.txt
MonProjet fsil$ git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use "git rm --cached <file>..." to unstage)
#
#! new file: Fichier_0.txt
#! new file: Fichier_1.txt
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
#! Fichier_2.txt
#! Fichier_3.txt
#! Fichier_4.txt
#! Fichier_5.txt
#! Fichier_6.txt
#! Fichier_7.txt
#! Fichier_8.txt
#! Fichier_9.txt
15
Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons
Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés
Commit des fichiers dans le repository
MonProjet fsil$ git commit -m'Premier commit !'
[master (root-commit) f331ccf] Premier commit !
2 files changed, 2 insertions(+), 0 deletions(-)
create mode 100644 Fichier_0.txt
create mode 100644 Fichier_1.txt
MonProjet fsil$ git status
# On branch master
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
#! Fichier_2.txt
#! Fichier_3.txt
#! Fichier_4.txt
#! Fichier_5.txt
#! Fichier_6.txt
#! Fichier_7.txt
#! Fichier_8.txt
#! Fichier_9.txt
nothing added to commit but untracked files present (use "git add" to track)
16
Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons
Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés
Git et ses trois espaces
• L’espace de travail
- l’ensemble des fichiers sur lequel travaille le développeur
• L’aire d’embarquement
- les fichiers qui ont subit des modifications et qui sont «candidats»
à un commit
• Le repository
- l’ensembles des fichiers ayant été «commités»
- l’historique des commits et les fichiers dans chaque version
associée
17
Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons
Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés
L’aire d’embarquement
• Dans la documentation anglophone
- index
- staging area
• Espace tampon entre l’espace de travail et le repository
• Possibilité d’ajouter ou de retirer les fichiers de l’aire
d’embarquement
18
Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons
Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés
Git et ses trois espaces
MonProjet fsil$ echo "OK ceci est un ajout..." >> Fichier_0.txt
MonProjet fsil$ git status
# On branch master
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
#! modified: Fichier_0.txt
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
#! Fichier_2.txt
#! Fichier_3.txt
#! Fichier_4.txt
#! Fichier_5.txt
#! Fichier_6.txt
#! Fichier_7.txt
#! Fichier_8.txt
#! Fichier_9.txt
no changes added to commit (use "git add" and/or "git commit -a")
Un fichier peut avoir subit des modifications et
ne pas être envoyé sur l’aire d’embarquement !
19
Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons
Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés
Git et ses trois espaces
MonProjet fsil$ git add Fichier_0.txt
MonProjet fsil$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
#! modified: Fichier_0.txt
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
#! Fichier_2.txt
#! Fichier_3.txt
#! Fichier_4.txt
#! Fichier_5.txt
#! Fichier_6.txt
#! Fichier_7.txt
#! Fichier_8.txt
#! Fichier_9.txt
Un fichier doit être rajouté explicitement à l’aire
d’embarquement avant de pouvoir faire l’objet d’un
commit même si il a déjà fait l’objet d’un commit
20
Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons
Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés
Git-ignorer des fichiers
• Le fichier .gitignore
- permet de spécifier des fichiers de l’espace de travail devant être
ignorer par git (index et repository)
- Lignes vides et lignes commençant par # sont ignorées
- Un nom de fichier spécifié : tous les fichiers de même nom
ignorés dans tous l’espace de travail
- “*“ utilisable comme joker mais s’applique que dans le dossier
courant ou dans le dossier indiqué par le pattern
- ...
21
Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons
Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés
Ignorer une catégorie de fichier
MonProjet fsil$ cat .gitignore
*.log
target
MonProjet fsil$ git add .gitignore
MonProjet fsil$ git commit -m'Le .gitignore dans le repo !'
[master 4f50e11] Le .gitignore dans le repo !
1 files changed, 3 insertions(+), 0 deletions(-)
create mode 100644 .gitignore
MonProjet fsil$ groovy ../createFiles 3 log
MonProjet fsil$ ls
Fichier_0.log! Fichier_1.txt! Fichier_3.txt! Fichier_6.txt! Fichier_9.txt
Fichier_0.txt! Fichier_2.log! Fichier_4.txt! Fichier_7.txt
Fichier_1.log! Fichier_2.txt! Fichier_5.txt! Fichier_8.txt
MonProjet fsil$ git status -s
M Fichier_0.txt
?? Fichier_2.txt
?? Fichier_3.txt
?? Fichier_4.txt
?? Fichier_5.txt
?? Fichier_6.txt
?? Fichier_7.txt
?? Fichier_8.txt
?? Fichier_9.txt
22
Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons
Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés
Les groupes de fichiers Git
• Fichier «tracked»
- fichier dans le repository ou dans l’aire d’embarquement
• Fichier «ignored»
- fichier ignoré par git
• Fichier «untracked»
- un fichier non ignoré et non «tracked»
23
Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons
Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés
Et les dossiers ?
• «Git tracks content not files !»
• Un dossier n’apparaît dans le repository que si il contient
du contenu i.e des fichiers non vides !
24
Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons
Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés
Git débite à la Hash !
• Un repository Git est une base de donnée stockant 4 types d’objet
- Blob : un blob correspond au contenu d’un fichier
- Tree : descriptions du premier niveau d’un dossier
- Commit : description d’un commit
- Tags : alias sur un objet décrit précédemment
• La valeur du hash code SHA1 d’un objet
- deux objets ayant le même contenu ont le même code SHA1
- le code SHA1 d’un objet est utilisé par Git comme identifiant de l’objet
- deux fichiers ayant le même contenu ne sont jamais dupliqués dans Git !
25
Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons
Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés
Restons branchés !
• La création de branches sur Git
- facile et rapide
- à utiliser massivement
• Usages
- développement de nouvelles fonctionnalités
- correction de bugs pour une version correspondant à une release
26
Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons
Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés
Création et utilisation d’une branche
MonProjet fsil$ git branch dev/198
ticetime-book:MonProjet fsil$ git branch
dev/198
* master
MonProjet fsil$ git checkout dev/198
M! Fichier_0.txt
Switched to branch 'dev/198'
MonProjet fsil$ git branch
* dev/198
master
27
Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons
Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés
Création et utilisation d’une branche
MonProjet fsil$ git status
# On branch dev/198
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
#! modified: Fichier_0.txt
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
#! Fichier_2.txt
#! Fichier_3.txt
#! Fichier_4.txt
#! Fichier_5.txt
#! Fichier_6.txt
#! Fichier_7.txt
#! Fichier_8.txt
#! Fichier_9.txt
no changes added to commit (use "git add" and/or "git commit -a")
28
Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons
Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés
La fusion c’est pas dangereux ?
• Pas avec Git :-)
• La commande «git merge <branche à fusionner>»
- la branche courante fusionne avec la branche à fusionner
- si pas de conflit le commit correspondant au merge est créé
- si conflit : «git diff» pour résoudre le conflit et commiter
29
Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons
Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés
Et le développement collaboratif
• Cloner un repository existant
- git clone <URL repository>
- Git supporte plusieurs protocoles : https, git, http...
$ git clone git@github.com:FranckSilvestre/MonPremierProjetGithub.git
Cloning into 'MonPremierProjetGithub'...
remote: Counting objects: 31, done.
remote: Compressing objects: 100% (11/11), done.
remote: Total 31 (delta 7), reused 31 (delta 7)
Receiving objects: 100% (31/31), done.
Resolving deltas: 100% (7/7), done.
30
Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons
Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés
Les branches d’un projet «cloné»
$ cd MonPremierProjetGithub/
$ ls
Fichier_0.txt! Fichier_2.txt! Fichier_4.txt! Fichier_6.txt! Fichier_8.txt
Fichier_1.txt! Fichier_3.txt! Fichier_5.txt! Fichier_7.txt! Fichier_9.txt
$ git status
# On branch master
nothing to commit (working directory clean)
$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/dev/198
remotes/origin/master
Les branches sur le repository distant ( tracking branches) sont
dissociées des branches sur le repository local.
31
Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons
Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés
Les «remotes»
• Un «remote» est un alias sur un repository distant
• Un repository local peut déclarer autant de «remotes» qu’il
le souhaite
• L’utilisation d’un «remote» n’est pas obligatoire pour
interagir avec un repository distant
• Déclarer un «remote»
$ git remote add origin git@github.com:FranckSilvestre/MonPremierProjetGithub.git
$ git remote -v
origin! git@github.com:FranckSilvestre/MonPremierProjetGithub.git (fetch)
origin! git@github.com:FranckSilvestre/MonPremierProjetGithub.git (push)
32
Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons
Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés
Interagir avec un repository distant
• Synchroniser une branche locale
- checkout sur la branche locale
- fetch de la branche distante
- merge des deux branches dans la branche locale
$ git checkout dev/198
$ git pull origin master
Fusion de la branche master sur le remote dans la
branche locale dev/198
• La commande pull
- effectue le fetch de la branche distante puis le merge
- possibilité de séparer les deux actions avec commandes fetch
et merge
33
Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons
Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés
Interagir avec un repository distant
• Répercuter les modifications de la branche locale sur une
branche distante
$ echo "Modif fichier 4" >> Fichier_4.txt
$ git add .
$ git commit -m"fichier 4 modifié encore"
[dev/198 f0cb3e4] fichier 4 modifié encore
1 files changed, 1 insertions(+), 0 deletions(-)
$ git push origin dev/198
Counting objects: 5, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 314 bytes, done.
Total 3 (delta 1), reused 0 (delta 0)
To git@github.com:FranckSilvestre/MonPremierProjetGithub.git
5d1cf0b..f0cb3e4 dev/198 -> dev/198
34
Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons
Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés
Liens utiles pour la pratique
• http://schacon.github.com/git/gittutorial.html
• http://gitref.org/
35

Contenu connexe

Tendances

Git ou le renouveau du contrôle de version
Git ou le renouveau du contrôle de versionGit ou le renouveau du contrôle de version
Git ou le renouveau du contrôle de versiongoldoraf
 
Git : Deux écoles de pensées, merge vs rebase
Git : Deux écoles de pensées, merge vs rebaseGit : Deux écoles de pensées, merge vs rebase
Git : Deux écoles de pensées, merge vs rebasejcbaudier
 
Découvrir et utiliser Git : le logiciel de gestion de versions décentralisé
Découvrir et utiliser Git : le logiciel de gestion de versions décentraliséDécouvrir et utiliser Git : le logiciel de gestion de versions décentralisé
Découvrir et utiliser Git : le logiciel de gestion de versions décentraliséECAM Brussels Engineering School
 
Présentation Git & GitHub
Présentation Git & GitHubPrésentation Git & GitHub
Présentation Git & GitHubThibault Vlacich
 
Présentation de git
Présentation de gitPrésentation de git
Présentation de gitJulien Blin
 
Migration d'une base de code subversion vers git
Migration d'une base de code subversion vers gitMigration d'une base de code subversion vers git
Migration d'une base de code subversion vers gitGeoffrey Bachelet
 
Git et les systèmes de gestion de versions
Git et les systèmes de gestion de versionsGit et les systèmes de gestion de versions
Git et les systèmes de gestion de versionsAlice Loeser
 
Compilation noyau linux depuis les sources
Compilation noyau linux depuis les sourcesCompilation noyau linux depuis les sources
Compilation noyau linux depuis les sourcesThierry Gayet
 
Travailler avec git et eclipse
Travailler avec git et eclipseTravailler avec git et eclipse
Travailler avec git et eclipseFrancois ANDRE
 
Développement avec Intégration continue:Git, Jenkins, Tomcat, CentOS, ubuntu
Développement avec Intégration continue:Git, Jenkins, Tomcat, CentOS, ubuntuDéveloppement avec Intégration continue:Git, Jenkins, Tomcat, CentOS, ubuntu
Développement avec Intégration continue:Git, Jenkins, Tomcat, CentOS, ubuntuAhmed Archive
 
PostgreSQL sous linux
PostgreSQL sous linuxPostgreSQL sous linux
PostgreSQL sous linuxKhalid ALLILI
 
De la chaîne de production au SI géré par des logiciels
De la chaîne de production au SI géré par des logicielsDe la chaîne de production au SI géré par des logiciels
De la chaîne de production au SI géré par des logicielsJohan Moreau
 
utilisation des core dump sous linux
utilisation des core dump sous linuxutilisation des core dump sous linux
utilisation des core dump sous linuxThierry Gayet
 
Les développeurs aussi maitrisent le systèmD - Devoxx 2015
Les développeurs aussi maitrisent le systèmD - Devoxx 2015Les développeurs aussi maitrisent le systèmD - Devoxx 2015
Les développeurs aussi maitrisent le systèmD - Devoxx 2015Publicis Sapient Engineering
 

Tendances (20)

Git ou le renouveau du contrôle de version
Git ou le renouveau du contrôle de versionGit ou le renouveau du contrôle de version
Git ou le renouveau du contrôle de version
 
Les bases de git
Les bases de gitLes bases de git
Les bases de git
 
Tutoriel GIT
Tutoriel GITTutoriel GIT
Tutoriel GIT
 
Git : Deux écoles de pensées, merge vs rebase
Git : Deux écoles de pensées, merge vs rebaseGit : Deux écoles de pensées, merge vs rebase
Git : Deux écoles de pensées, merge vs rebase
 
Découvrir et utiliser Git : le logiciel de gestion de versions décentralisé
Découvrir et utiliser Git : le logiciel de gestion de versions décentraliséDécouvrir et utiliser Git : le logiciel de gestion de versions décentralisé
Découvrir et utiliser Git : le logiciel de gestion de versions décentralisé
 
Présentation Git & GitHub
Présentation Git & GitHubPrésentation Git & GitHub
Présentation Git & GitHub
 
Présentation de git
Présentation de gitPrésentation de git
Présentation de git
 
Migration d'une base de code subversion vers git
Migration d'une base de code subversion vers gitMigration d'une base de code subversion vers git
Migration d'une base de code subversion vers git
 
Git et les systèmes de gestion de versions
Git et les systèmes de gestion de versionsGit et les systèmes de gestion de versions
Git et les systèmes de gestion de versions
 
Linux 101 slides-fr
Linux 101 slides-frLinux 101 slides-fr
Linux 101 slides-fr
 
Compilation noyau linux depuis les sources
Compilation noyau linux depuis les sourcesCompilation noyau linux depuis les sources
Compilation noyau linux depuis les sources
 
Travailler avec git et eclipse
Travailler avec git et eclipseTravailler avec git et eclipse
Travailler avec git et eclipse
 
Développement avec Intégration continue:Git, Jenkins, Tomcat, CentOS, ubuntu
Développement avec Intégration continue:Git, Jenkins, Tomcat, CentOS, ubuntuDéveloppement avec Intégration continue:Git, Jenkins, Tomcat, CentOS, ubuntu
Développement avec Intégration continue:Git, Jenkins, Tomcat, CentOS, ubuntu
 
PostgreSQL sous linux
PostgreSQL sous linuxPostgreSQL sous linux
PostgreSQL sous linux
 
De la chaîne de production au SI géré par des logiciels
De la chaîne de production au SI géré par des logicielsDe la chaîne de production au SI géré par des logiciels
De la chaîne de production au SI géré par des logiciels
 
utilisation des core dump sous linux
utilisation des core dump sous linuxutilisation des core dump sous linux
utilisation des core dump sous linux
 
Les développeurs aussi maitrisent le systèmD - Devoxx 2015
Les développeurs aussi maitrisent le systèmD - Devoxx 2015Les développeurs aussi maitrisent le systèmD - Devoxx 2015
Les développeurs aussi maitrisent le systèmD - Devoxx 2015
 
Git développez autrement
Git développez autrementGit développez autrement
Git développez autrement
 
Outils de gestion de projets
Outils de gestion de projetsOutils de gestion de projets
Outils de gestion de projets
 
Linux Scripting
Linux Scripting Linux Scripting
Linux Scripting
 

Similaire à Cours sur github part3 git

Formation Play! framework
Formation Play! frameworkFormation Play! framework
Formation Play! frameworkBenoît Simard
 
Initiation à Git, GitHub2.pdf
Initiation à Git, GitHub2.pdfInitiation à Git, GitHub2.pdf
Initiation à Git, GitHub2.pdfmouad55
 
Le système de versioning git
Le système de versioning gitLe système de versioning git
Le système de versioning gitNassim Bahri
 
Développement informatique : Gestion de projet, versioning, debugging, testin...
Développement informatique : Gestion de projet, versioning, debugging, testin...Développement informatique : Gestion de projet, versioning, debugging, testin...
Développement informatique : Gestion de projet, versioning, debugging, testin...ECAM Brussels Engineering School
 
WordCamp Lyon 2015 - WordPress, Git et l'intégration continue
 WordCamp Lyon 2015 - WordPress, Git et l'intégration continue WordCamp Lyon 2015 - WordPress, Git et l'intégration continue
WordCamp Lyon 2015 - WordPress, Git et l'intégration continueStéphane HULARD
 
Utilisation de git avec Delphi
Utilisation de git avec DelphiUtilisation de git avec Delphi
Utilisation de git avec Delphipprem
 
Formation GIT gratuite par ippon 2014
Formation GIT gratuite par ippon 2014Formation GIT gratuite par ippon 2014
Formation GIT gratuite par ippon 2014Ippon
 
envol08-sgv envol08-sgv envol08-sgv envol08-sgv
envol08-sgv envol08-sgv envol08-sgv envol08-sgvenvol08-sgv envol08-sgv envol08-sgv envol08-sgv
envol08-sgv envol08-sgv envol08-sgv envol08-sgvmia884611
 
Introduction à git.pdf
Introduction à git.pdfIntroduction à git.pdf
Introduction à git.pdfbadrfathallah2
 
Git & Rstudio vincent guyader
Git & Rstudio vincent guyaderGit & Rstudio vincent guyader
Git & Rstudio vincent guyaderVincent Guyader
 
les commandes Git que vous devez absolument connaitre!.pdf
les commandes Git que vous devez absolument connaitre!.pdfles commandes Git que vous devez absolument connaitre!.pdf
les commandes Git que vous devez absolument connaitre!.pdfSimpleLearn1
 
Débuter avec Git & github
Débuter avec Git & githubDébuter avec Git & github
Débuter avec Git & githubMonoem Youneb
 
GIT training - basic for software projects
GIT training - basic for software projectsGIT training - basic for software projects
GIT training - basic for software projectsThierry Gayet
 
Rapport openembedded
Rapport openembeddedRapport openembedded
Rapport openembeddedAyoub Rouzi
 

Similaire à Cours sur github part3 git (20)

3_SCM_Git.pdf
3_SCM_Git.pdf3_SCM_Git.pdf
3_SCM_Git.pdf
 
Formation Play! framework
Formation Play! frameworkFormation Play! framework
Formation Play! framework
 
git.pdf
git.pdfgit.pdf
git.pdf
 
Initiation à Git, GitHub2.pdf
Initiation à Git, GitHub2.pdfInitiation à Git, GitHub2.pdf
Initiation à Git, GitHub2.pdf
 
Le système de versioning git
Le système de versioning gitLe système de versioning git
Le système de versioning git
 
Développement informatique : Gestion de projet, versioning, debugging, testin...
Développement informatique : Gestion de projet, versioning, debugging, testin...Développement informatique : Gestion de projet, versioning, debugging, testin...
Développement informatique : Gestion de projet, versioning, debugging, testin...
 
WordCamp Lyon 2015 - WordPress, Git et l'intégration continue
 WordCamp Lyon 2015 - WordPress, Git et l'intégration continue WordCamp Lyon 2015 - WordPress, Git et l'intégration continue
WordCamp Lyon 2015 - WordPress, Git et l'intégration continue
 
Utilisation de git avec Delphi
Utilisation de git avec DelphiUtilisation de git avec Delphi
Utilisation de git avec Delphi
 
Formation GIT gratuite par ippon 2014
Formation GIT gratuite par ippon 2014Formation GIT gratuite par ippon 2014
Formation GIT gratuite par ippon 2014
 
SVN to GitHUb
SVN to GitHUbSVN to GitHUb
SVN to GitHUb
 
envol08-sgv envol08-sgv envol08-sgv envol08-sgv
envol08-sgv envol08-sgv envol08-sgv envol08-sgvenvol08-sgv envol08-sgv envol08-sgv envol08-sgv
envol08-sgv envol08-sgv envol08-sgv envol08-sgv
 
Introduction à git.pdf
Introduction à git.pdfIntroduction à git.pdf
Introduction à git.pdf
 
Git & Rstudio vincent guyader
Git & Rstudio vincent guyaderGit & Rstudio vincent guyader
Git & Rstudio vincent guyader
 
les commandes Git que vous devez absolument connaitre!.pdf
les commandes Git que vous devez absolument connaitre!.pdfles commandes Git que vous devez absolument connaitre!.pdf
les commandes Git que vous devez absolument connaitre!.pdf
 
Débuter avec Git & github
Débuter avec Git & githubDébuter avec Git & github
Débuter avec Git & github
 
Introduction à HDFS
Introduction à HDFSIntroduction à HDFS
Introduction à HDFS
 
GIT training - basic for software projects
GIT training - basic for software projectsGIT training - basic for software projects
GIT training - basic for software projects
 
Devops - Git - VSTS
Devops - Git - VSTSDevops - Git - VSTS
Devops - Git - VSTS
 
VSTS Git
VSTS GitVSTS Git
VSTS Git
 
Rapport openembedded
Rapport openembeddedRapport openembedded
Rapport openembedded
 

Cours sur github part3 git

  • 1. Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés DCLL - Partie III Git - concepts clés UPS, Master Informatique M1 UE14 Franck Silvestre 1
  • 2. Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés Développement collaboratif Développer de manière collaborative, c’est travailler à plusieurs sur la même base de code pour produire un logiciel 2
  • 3. Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés Version Control System • Gestion de version de code de source • Permet de gérer les changements sur le code source • Prise en compte des modifications provenant de plusieurs contributeurs • Révision : un lot de changements reportés par un contributeur induit une nouvelle version du code source • Possibilité de retrouver à tout moment le code source correspondant à une révision donnée 3
  • 4. Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés VCS - Concepts clés • Repository / dépôt - réceptacle du code source : versions passée et en cours • 3 modèles d’architecture - modèle local - modèle centralisé - modèle distribué Utilisable dans le cadre d’un développement collaboratif 4
  • 5. Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés Modèle architecture centralisée Serveur Sur un serveur central Poste de développement m Fichiers Chaque développeur travaille sur une copie locale des fichiers Poste de développement 1 Fichiers ... Fichiers Révision 1 Fichiers Révision n ... Repository 5
  • 6. Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés Modèle architecture distribuée Serveur Sur un serveur central Poste de développement m Fichiers Chaque développeur travaille sur une copie locale des fichiers et dispose d'un mirroir du repository Poste de développement 1 Fichiers ... Fichiers Révision 1 Fichiers Révision n ... Repository Fichiers Révision 1 Fichiers Révision n ... Repository Fichiers Révision 1 Fichiers Révision n ... Repository 6
  • 7. Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés Modèle distribué • Avantages - Modèle plus tolérant aux pannes • si le serveur tombe, le repository n’est pas perdu - Modèles organisationnels plus riches • modèles de repositories hiérarchiques • Inconvénient - Temps de prise en main un peu plus long 7
  • 8. Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés Git • Développement collaboratif du noyeau Linux - changement de politique commerciale de BitKeeper - création d’un nouvel outil s’impose • Avril 2005 : 1er commit de Linus Thorvald 6,7 millions de lignes de code ! 8
  • 9. Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés Projets utilisant Git • Git • Noyau Linux • Perl • Eclipse • Gnome • KDE • Qt • Ruby On Rails • Android • PostgreSQL • Debian • X.org • Grails • ... 9
  • 10. Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés Git - Installation • Linux - distributions binaires Debian/Ubuntu/... sudo apt-get install git-core git-doc git-gui - distributions binaires Redhat/fedora/cent-os sudo yum install git-all - distribution à partir des sources • Windows - cygwin - msysgit (recommandé) • Mac OS X - git-osx-installer - à partir des sources 10
  • 11. Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés Git en ligne de commande git usage: git [--version] [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path] [-p|--paginate|--no-pager] [--no-replace-objects] [--bare] [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>] [-c name=value] [--help] <command> [<args>] The most commonly used git commands are: add Add file contents to the index bisect Find by binary search the change that introduced a bug branch List, create, or delete branches checkout Checkout a branch or paths to the working tree clone Clone a repository into a new directory commit Record changes to the repository diff Show changes between commits, commit and working tree, etc fetch Download objects and refs from another repository grep Print lines matching a pattern init Create an empty git repository or reinitialize an existing one log Show commit logs merge Join two or more development histories together mv Move or rename a file, a directory, or a symlink pull Fetch from and merge with another repository or a local branch push Update remote refs along with associated objects rebase Forward-port local commits to the updated upstream head reset Reset current HEAD to the specified state rm Remove files from the working tree and from the index show Show various types of objects status Show the working tree status tag Create, list, delete or verify a tag object signed with GPG See 'git help <command>' for more information on a specific command. 11
  • 12. Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés Git configuration git config --global user.name "Franck Silvestre" git config --global user.email "franck.silvestre@irit.fr" git config --global color.ui "auto" git config --global -l user.name=Franck Silvestre user.email=franck.silvestre@irit.fr color.ui=auto Pas de commit possibles si pas d’identité ! 12
  • 13. Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés Premiers projet Git git init MonProjet Initialized empty Git repository in /Users/fsil/10_Dev/Other/Bacasable/MonProjet/.git/ mkdir MonProjet2 cd MonProjet2/ git init Initialized empty Git repository in /Users/fsil/10_Dev/Other/Bacasable/MonProjet2/.git/ On peut intialiser le repository Git sur un projet existant ! 13
  • 14. Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés Création de fichiers dans le projet MonProjet fsil$ groovy ../createFiles MonProjet fsil$ ls Fichier_0.txt! Fichier_2.txt! Fichier_4.txt! Fichier_6.txt! Fichier_8.txt Fichier_1.txt! Fichier_3.txt! Fichier_5.txt! Fichier_7.txt! Fichier_9.txt MonProjet fsil$ git status # On branch master # # Initial commit # # Untracked files: # (use "git add <file>..." to include in what will be committed) # #! Fichier_0.txt #! Fichier_1.txt #! Fichier_2.txt #! Fichier_3.txt #! Fichier_4.txt #! Fichier_5.txt #! Fichier_6.txt #! Fichier_7.txt #! Fichier_8.txt #! Fichier_9.txt nothing added to commit but untracked files present (use "git add" to track) 14
  • 15. Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés Ajout des fichiers dans «l’aire d’embarquement» MonProjet fsil$ git add Fichier_0.txt MonProjet fsil$ git add Fichier_1.txt MonProjet fsil$ git status # On branch master # # Initial commit # # Changes to be committed: # (use "git rm --cached <file>..." to unstage) # #! new file: Fichier_0.txt #! new file: Fichier_1.txt # # Untracked files: # (use "git add <file>..." to include in what will be committed) # #! Fichier_2.txt #! Fichier_3.txt #! Fichier_4.txt #! Fichier_5.txt #! Fichier_6.txt #! Fichier_7.txt #! Fichier_8.txt #! Fichier_9.txt 15
  • 16. Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés Commit des fichiers dans le repository MonProjet fsil$ git commit -m'Premier commit !' [master (root-commit) f331ccf] Premier commit ! 2 files changed, 2 insertions(+), 0 deletions(-) create mode 100644 Fichier_0.txt create mode 100644 Fichier_1.txt MonProjet fsil$ git status # On branch master # Untracked files: # (use "git add <file>..." to include in what will be committed) # #! Fichier_2.txt #! Fichier_3.txt #! Fichier_4.txt #! Fichier_5.txt #! Fichier_6.txt #! Fichier_7.txt #! Fichier_8.txt #! Fichier_9.txt nothing added to commit but untracked files present (use "git add" to track) 16
  • 17. Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés Git et ses trois espaces • L’espace de travail - l’ensemble des fichiers sur lequel travaille le développeur • L’aire d’embarquement - les fichiers qui ont subit des modifications et qui sont «candidats» à un commit • Le repository - l’ensembles des fichiers ayant été «commités» - l’historique des commits et les fichiers dans chaque version associée 17
  • 18. Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés L’aire d’embarquement • Dans la documentation anglophone - index - staging area • Espace tampon entre l’espace de travail et le repository • Possibilité d’ajouter ou de retirer les fichiers de l’aire d’embarquement 18
  • 19. Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés Git et ses trois espaces MonProjet fsil$ echo "OK ceci est un ajout..." >> Fichier_0.txt MonProjet fsil$ git status # On branch master # Changes not staged for commit: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # #! modified: Fichier_0.txt # # Untracked files: # (use "git add <file>..." to include in what will be committed) # #! Fichier_2.txt #! Fichier_3.txt #! Fichier_4.txt #! Fichier_5.txt #! Fichier_6.txt #! Fichier_7.txt #! Fichier_8.txt #! Fichier_9.txt no changes added to commit (use "git add" and/or "git commit -a") Un fichier peut avoir subit des modifications et ne pas être envoyé sur l’aire d’embarquement ! 19
  • 20. Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés Git et ses trois espaces MonProjet fsil$ git add Fichier_0.txt MonProjet fsil$ git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # #! modified: Fichier_0.txt # # Untracked files: # (use "git add <file>..." to include in what will be committed) # #! Fichier_2.txt #! Fichier_3.txt #! Fichier_4.txt #! Fichier_5.txt #! Fichier_6.txt #! Fichier_7.txt #! Fichier_8.txt #! Fichier_9.txt Un fichier doit être rajouté explicitement à l’aire d’embarquement avant de pouvoir faire l’objet d’un commit même si il a déjà fait l’objet d’un commit 20
  • 21. Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés Git-ignorer des fichiers • Le fichier .gitignore - permet de spécifier des fichiers de l’espace de travail devant être ignorer par git (index et repository) - Lignes vides et lignes commençant par # sont ignorées - Un nom de fichier spécifié : tous les fichiers de même nom ignorés dans tous l’espace de travail - “*“ utilisable comme joker mais s’applique que dans le dossier courant ou dans le dossier indiqué par le pattern - ... 21
  • 22. Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés Ignorer une catégorie de fichier MonProjet fsil$ cat .gitignore *.log target MonProjet fsil$ git add .gitignore MonProjet fsil$ git commit -m'Le .gitignore dans le repo !' [master 4f50e11] Le .gitignore dans le repo ! 1 files changed, 3 insertions(+), 0 deletions(-) create mode 100644 .gitignore MonProjet fsil$ groovy ../createFiles 3 log MonProjet fsil$ ls Fichier_0.log! Fichier_1.txt! Fichier_3.txt! Fichier_6.txt! Fichier_9.txt Fichier_0.txt! Fichier_2.log! Fichier_4.txt! Fichier_7.txt Fichier_1.log! Fichier_2.txt! Fichier_5.txt! Fichier_8.txt MonProjet fsil$ git status -s M Fichier_0.txt ?? Fichier_2.txt ?? Fichier_3.txt ?? Fichier_4.txt ?? Fichier_5.txt ?? Fichier_6.txt ?? Fichier_7.txt ?? Fichier_8.txt ?? Fichier_9.txt 22
  • 23. Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés Les groupes de fichiers Git • Fichier «tracked» - fichier dans le repository ou dans l’aire d’embarquement • Fichier «ignored» - fichier ignoré par git • Fichier «untracked» - un fichier non ignoré et non «tracked» 23
  • 24. Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés Et les dossiers ? • «Git tracks content not files !» • Un dossier n’apparaît dans le repository que si il contient du contenu i.e des fichiers non vides ! 24
  • 25. Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés Git débite à la Hash ! • Un repository Git est une base de donnée stockant 4 types d’objet - Blob : un blob correspond au contenu d’un fichier - Tree : descriptions du premier niveau d’un dossier - Commit : description d’un commit - Tags : alias sur un objet décrit précédemment • La valeur du hash code SHA1 d’un objet - deux objets ayant le même contenu ont le même code SHA1 - le code SHA1 d’un objet est utilisé par Git comme identifiant de l’objet - deux fichiers ayant le même contenu ne sont jamais dupliqués dans Git ! 25
  • 26. Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés Restons branchés ! • La création de branches sur Git - facile et rapide - à utiliser massivement • Usages - développement de nouvelles fonctionnalités - correction de bugs pour une version correspondant à une release 26
  • 27. Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés Création et utilisation d’une branche MonProjet fsil$ git branch dev/198 ticetime-book:MonProjet fsil$ git branch dev/198 * master MonProjet fsil$ git checkout dev/198 M! Fichier_0.txt Switched to branch 'dev/198' MonProjet fsil$ git branch * dev/198 master 27
  • 28. Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés Création et utilisation d’une branche MonProjet fsil$ git status # On branch dev/198 # Changes not staged for commit: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # #! modified: Fichier_0.txt # # Untracked files: # (use "git add <file>..." to include in what will be committed) # #! Fichier_2.txt #! Fichier_3.txt #! Fichier_4.txt #! Fichier_5.txt #! Fichier_6.txt #! Fichier_7.txt #! Fichier_8.txt #! Fichier_9.txt no changes added to commit (use "git add" and/or "git commit -a") 28
  • 29. Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés La fusion c’est pas dangereux ? • Pas avec Git :-) • La commande «git merge <branche à fusionner>» - la branche courante fusionne avec la branche à fusionner - si pas de conflit le commit correspondant au merge est créé - si conflit : «git diff» pour résoudre le conflit et commiter 29
  • 30. Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés Et le développement collaboratif • Cloner un repository existant - git clone <URL repository> - Git supporte plusieurs protocoles : https, git, http... $ git clone git@github.com:FranckSilvestre/MonPremierProjetGithub.git Cloning into 'MonPremierProjetGithub'... remote: Counting objects: 31, done. remote: Compressing objects: 100% (11/11), done. remote: Total 31 (delta 7), reused 31 (delta 7) Receiving objects: 100% (31/31), done. Resolving deltas: 100% (7/7), done. 30
  • 31. Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés Les branches d’un projet «cloné» $ cd MonPremierProjetGithub/ $ ls Fichier_0.txt! Fichier_2.txt! Fichier_4.txt! Fichier_6.txt! Fichier_8.txt Fichier_1.txt! Fichier_3.txt! Fichier_5.txt! Fichier_7.txt! Fichier_9.txt $ git status # On branch master nothing to commit (working directory clean) $ git branch -a * master remotes/origin/HEAD -> origin/master remotes/origin/dev/198 remotes/origin/master Les branches sur le repository distant ( tracking branches) sont dissociées des branches sur le repository local. 31
  • 32. Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés Les «remotes» • Un «remote» est un alias sur un repository distant • Un repository local peut déclarer autant de «remotes» qu’il le souhaite • L’utilisation d’un «remote» n’est pas obligatoire pour interagir avec un repository distant • Déclarer un «remote» $ git remote add origin git@github.com:FranckSilvestre/MonPremierProjetGithub.git $ git remote -v origin! git@github.com:FranckSilvestre/MonPremierProjetGithub.git (fetch) origin! git@github.com:FranckSilvestre/MonPremierProjetGithub.git (push) 32
  • 33. Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés Interagir avec un repository distant • Synchroniser une branche locale - checkout sur la branche locale - fetch de la branche distante - merge des deux branches dans la branche locale $ git checkout dev/198 $ git pull origin master Fusion de la branche master sur le remote dans la branche locale dev/198 • La commande pull - effectue le fetch de la branche distante puis le merge - possibilité de séparer les deux actions avec commandes fetch et merge 33
  • 34. Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés Interagir avec un repository distant • Répercuter les modifications de la branche locale sur une branche distante $ echo "Modif fichier 4" >> Fichier_4.txt $ git add . $ git commit -m"fichier 4 modifié encore" [dev/198 f0cb3e4] fichier 4 modifié encore 1 files changed, 1 insertions(+), 0 deletions(-) $ git push origin dev/198 Counting objects: 5, done. Delta compression using up to 8 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 314 bytes, done. Total 3 (delta 1), reused 0 (delta 0) To git@github.com:FranckSilvestre/MonPremierProjetGithub.git 5d1cf0b..f0cb3e4 dev/198 -> dev/198 34
  • 35. Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons Paternité - Pas d'Utilisation Commerciale 3.0 non transposé. 2012, tous droits réservés Liens utiles pour la pratique • http://schacon.github.com/git/gittutorial.html • http://gitref.org/ 35