gestion de version avec git - greyc · le développeur utilise sont dépôt local pour gérer les...
Post on 11-Aug-2020
7 Views
Preview:
TRANSCRIPT
Bruno Mermet
1
Gestion de version avecGIT
Bruno MermetUniversité du Havre
2017
Bruno Mermet
2
PréliminairesInstallation de git
● Allez à l'adresse suivante :
– https://git-scm.com/download/linux
● Pour les « roots » :
Exécuter la commande indiquée
exemple : sous Ubuntu, apt-get install git● Pour les autres :
– Cliquer sur le lien « download a tarball »
– Téléchargez la version de votre choix (git1.9.1.tar.gz)
– Décompresser l'archive dans un répertoire $GIT
– cd $GIT ; ./configure ; make
– export PATH=$GIT:$PATH
Bruno Mermet
3
Plan
● Principes de la Gestion de Version– Gestion de version mono-document (T3)
– Gestion de version multi-documents (T12)
● Fonctionnement de GIT (T21)● Dépôt commun et application à Github
– Les bases (T72)
– Fork et pull request (T86)
● Bilan, conseils, astuces (T100)
Bruno Mermet
4
La gestion de version Mono-document
● Permettre d'avoir un historique des différentes versions d'un document avec :– Explications
– Retour en arrière possible
– Identification des versions
● Permettre le travail à plusieurs● Centraliser le dépôt des documents (sauvegardes)
Bruno Mermet
5
GV mono-document : Conflits (1/7)
Doc1v2
Dépôt
Dév A
Dév B
Doc1v2
Bruno Mermet
6
Doc1v2
GV mono-document : Conflits (2/7)
Doc1v2
Dépôt
Dév A
Dév B
Doc1v2
Bruno Mermet
7
Doc1v2
GV mono-document : Conflits (3/7)
Doc1v2
Dépôt
Dév A
Dév B
Doc1v2
Doc1v2
Bruno Mermet
8
Doc1v2
GV mono-document : Conflits (4/7)
Doc1v2
Dépôt
Dév A
Dév B
Doc1Doc1v3Av3A
Doc1v2
Doc1v2
Bruno Mermet
9
GV mono-document : Conflits (5/7)
Doc1v2
Dépôt
Dév A
Dév B
Doc1Doc1v3Av3A
Doc1v2
Doc1Doc1v3Bv3B
Bruno Mermet
10
GV mono-document : Conflits (6/7)
Dépôt
Dév A
Dév B
Doc1Doc1v3Av3A
Doc1Doc1v3Bv3B
Doc1Doc1v3Bv3B
Bruno Mermet
11
GV mono-document : Conflits (7/7)
Dépôt
Dév A
Dév B
Doc1Doc1v3Av3A
Doc1Doc1v3Bv3B
Doc1Doc1v3Av3A
Bruno Mermet
12
GV mono-document : solution● Gestion des conflits :
Utilisation de verrous pour modifier un document :● Check-out document (si pas de verrou sur le document, met un
verrou puis le récupère)● Édition du document en local● Check-in document (met la nouvelle version du document dans le
dépôt, libère le verrou, et supprime le document de la zone de travail)
● Implantations :– SCCS– RCS
● Stockage :– Stockage différentiel des fichiers textes via l'utilitaire diff.
Bruno Mermet
13
GV multi-documents
● Pourquoi :– Un projet = un ensemble de documents
– Une version d'un projet peut correspondre à des versions différentes de chacun des documents le composant
– Solution des verrous inexploitable
● Implantations :– CVS, reposant sur SCCS/RCS
– Subversion (SVN), évolution de CVS
– Git
– Autres (Mercurial, ClearCase, …)
Bruno Mermet
14
GV multi-documents : conflits
● Pas de verrous :– La récupération (update) d'une version est libre
– Les conflits sont détectés à la sauvegarde (commit) sur le dépôt :
● Pas de conflit, sauvegarde effectuée● Conflit, sauvegarde refusée
– Les conflits sont corrigés en local, lors de la récupération d'une nouvelle version
Bruno Mermet
15
GV multi-documents : conflits (1/14)
Dév A
Dév B
Doc 1v2
Bruno Mermet
16
GV multi-documents : conflits (2/14)
Dév A
Dév B
Doc 1v2
Doc1v2
Bruno Mermet
17
Doc1v2
GV multi-documents : conflits (3/14)
Dév A
Dév B
Doc 1v2
Doc1v2
Bruno Mermet
18
Doc1v2
Doc1v2
GV multi-documents : conflits (4/14)
Dév A
Dév B
Doc 1v2
Doc1Doc1v3A (v3A (v2)v2)
Bruno Mermet
19
Doc1v2
Doc1v2
Doc1Doc1v3B (v3B (v2)v2)
GV multi-documents : conflits (5/14)
Dév A
Dév B
Doc 1v2
Doc1Doc1v3A (v3A (v2)v2)
Bruno Mermet
20
Doc1Doc1v3B (v3B (v2)v2)
GV multi-documents : conflits (6/14)
Dév A
Dév B
Doc1Doc1v3B (v3B (v2)v2)
Doc1Doc1v3A (v3A (v2)v2)
Bruno Mermet
21
Doc1Doc1v3B (v3B (v2)v2)
GV multi-documents : conflits (7/14)
Dév A
Dév B
Doc1Doc1v3B (v3B (v2)v2)
Doc1Doc1v3A (v3A (v2)v2)
Bruno Mermet
22
Doc1Doc1v3B (v3B (v2)v2)
GV multi-documents : conflits (8/14)
Dév A
Dév B
Doc1Doc1v3B (v3B (v2)v2)
Doc1Doc1v3A (v3A (v2)v2)
Différence
Bruno Mermet
23
Doc1Doc1v3B (v3B (v2)v2)
GV multi-documents : conflits (9/14)
Dév A
Dév B
Doc1Doc1v3B (v3B (v2)v2)
Doc1Doc1v3A (v3A (v2)v2)
Différence
Risque de Conflit
Bruno Mermet
24
Doc1Doc1v3B (v3B (v2)v2)
GV multi-documents : conflits (10/14)
Dév A
Dév B
Doc1Doc1v3B (v3B (v2)v2)
Doc1Doc1v3A (v3A (v2)v2)
Différence
Risque de ConflitRefus
Bruno Mermet
25
Doc1Doc1v3B (v3B (v2)v2)
GV multi-documents : conflits (11/14)
Dév A
Dév B
Doc1Doc1v3B (v3B (v2)v2)
Doc1Doc1v3A (v3A (v2)v2)
Bruno Mermet
26
Doc1Doc1v3B (v3B (v2)v2)
GV multi-documents : conflits (12/14)
Dév A
Dév B
Doc1Doc1v3B (v3B (v2)v2)
Doc1Doc1v3A (v3A (v2)v2) Doc1Doc1
v3B (v3B (v2)v2)
Bruno Mermet
27
Doc1Doc1v3B (v3B (v2)v2)
GV multi-documents : conflits (13/14)
Dév A
Dév B
Doc1Doc1v3B (v3B (v2)v2)
Doc1Doc1v3A (v3A (v2)v2)
Doc1Doc1v3A (v3A (v3B)v3B)
Bruno Mermet
28
Doc1Doc1v3B (v3B (v2)v2)
GV multi-documents : conflits (14/14)
Dév A
Dév B
Doc1Doc1v3A (v3A (v2)v2)
Doc1Doc1v3A (v3A (v3B)v3B) Doc1Doc1
v3A (v3A (v3B)v3B)
Bruno Mermet
29
Gestion de version décentraliséePrincipes généraux
● Chaque développeur possède– Une version courante
– Sa propre version du dépôt
● Un (ou plusieurs) serveur(s) héberge(nt) une version du projet
● Le développeur utilise sont dépôt local pour gérer les versions
● Régulièrement, le développeur synchronise son dépôt local avec le(s) dépôt(s) distants
Bruno Mermet
30
Gestion de version décentraliséeOpérations principales
● Récupérer un projet depuis un serveur Clone
● Récupérer une version depuis son dépôtCheckout
● Sauvegarder une nouvelle version dans son dépôtCommit
● Transférer la version actuelle de son dépôt sur le serveurPush
● Récupérer une nouvelle version depuis le dépôtFetch/Pull
● Fusionner de versionsMerge
Bruno Mermet
31
Git : un système de gestion de versions décentralisé
● Créé en 2005 par Linus Torvalds pour le développement du noyau de Linux
● Utilisation git commandeGit paramètres
● Aide– git help commandeGit
– Livre Pro Git : https://git-scm.com/book/fr/v2
● Utilisation– Auparavant surtout pour les logiciels libres
– Depuis très récemment, adopté massivement par les entreprises (en lieu et place de subversion)
Bruno Mermet
32
Git : Plan
● Principes généraux (T23)● Fonctionnement de base
– Travail avec un seul fichier (T27)
– Travail avec plusieurs fichiers et fichier .gitignore (T37)
– Étiqueter une version (T41)
● Travailler avec les branches (T43)● Retour sur le fonctionnement de git en images (T64)
Bruno Mermet
33
Travailler avec Git● Travail en local
– Les différents états d'un fichier
– Créer son répertoire de travail
– Configurer git
– Exemple introductif avec un seul fichier
– L'historique
– Les étiquettes
– La notion de branche
● Synchronisation avec un autre dépôt
Bruno Mermet
34
Créer son répertoire de travail
● Créer le répertoire
mkdir Projet
● Aller dans le répertoire
cd Projet
● Initialiser le dépôt git
git init
.└── .git/ ├── branches/ ├── config ├── description ├── HEAD ├── hooks/ │ ├── applypatch-msg.sample │ ├── commit-msg.sample │ ├── post-update.sample │ ├── pre-applypatch.sample │ ├── pre-commit.sample │ ├── prepare-commit-msg.sample │ ├── pre-push.sample │ ├── pre-rebase.sample │ └── update.sample ├── info/ │ └── exclude ├── objects/ │ ├── info/ │ └── pack/ └── refs/ ├── heads/ └── tags/
Bruno Mermet
35
Configurer git● Configuration : les bases
– Configuration globale : git config --global
– Configuration pour le projet courant : git config
● Configuration : le minimum– git config --global user.name ''Prénom Nom''
– git config --global user.email ''adresseElectronique''
● Configuration : le petite plus– git config --global core.editor emacs
● Affichage– git config -l
Bruno Mermet
36
Statut d'un fichier
● Statuts possibles :– Modifié (ou créé) localement
– Prêt à être transféré dans le dépôt
– Tel que dans le dépôt
● Connaître le statut– git status
Sur la branche master
Validation initiale
rien à valider (créez/copiez des fichiers et utilisez "git add" pour les suivre)
Bruno Mermet
37
Statut d'un fichier
● Statuts possibles :– Modifié (ou créé) localement
– Prêt à être transféré dans le dépôt
– Tel que dans le dépôt
● Connaître le statut– git status
add
Sur la branche master
Validation initiale
rien à valider (créez/copiez des fichiers et utilisez "git add" pour les suivre)
Bruno Mermet
38
Statut d'un fichier
● Statuts possibles :– Modifié (ou créé) localement
– Prêt à être transféré dans le dépôt
– Tel que dans le dépôt
● Connaître le statut– git status
add
commit
Sur la branche master
Validation initiale
rien à valider (créez/copiez des fichiers et utilisez "git add" pour les suivre)
Bruno Mermet
39
Travail avec un fichierExemple (1)
● emacs Hello.java● ls● git statusSur la branche master
Validation initiale
Fichiers non suivis: (utilisez "git add <fichier>..." pour inclure dans ce qui sera validé)
Hello.java
aucune modification ajoutée à la validation mais des fichiers non suivis sont présents (utilisez "git add" pour les suivre)
Hello.java
Bruno Mermet
40
Travail avec un fichierExemple (2)
● javac Hello.java● ls● git statusSur la branche master
Validation initiale
Fichiers non suivis: (utilisez "git add <fichier>..." pour inclure dans ce qui sera validé)
Hello.classHello.java
aucune modification ajoutée à la validation mais des fichiers non suivis sont présents (utilisez "git add" pour les suivre)
Hello.class Hello.java
Bruno Mermet
41
Travail avec un fichierExemple (3)
● git add Hello.java● git status
Sur la branche master
Validation initiale
Modifications qui seront validées : (utilisez "git rm --cached <fichier>..." pour désindexer)
nouveau fichier: Hello.java
Fichiers non suivis: (utilisez "git add <fichier>..." pour inclure dans ce qui sera validé)
Hello.class
Bruno Mermet
42
Travail avec un fichierExemple (4)
● git commit -m ''Création du Hello standard''
● git statusSur la branche masterFichiers non suivis: (utilisez "git add <fichier>..." pour inclure dans ce qui sera validé)
Hello.class
aucune modification ajoutée à la validation mais des fichiers non suivis sont présents (utilisez "git add" pour les suivre)
[master (commit racine) fd577c3] Création du Hello standard 1 file changed, 5 insertions(+) create mode 100644 Hello.java
Bruno Mermet
43
Travail avec un fichierExemple (5)
● git log
commit fd577c31871eb2c938a5d772dd5a13cd7734fc83Author: Bruno Mermet <Bruno.Mermet@univ-lehavre.fr>Date: Tue Jun 6 12:50:26 2017 +0200
Création du Hello standard
Bruno Mermet
44
Travail avec un fichierExemple (6)
● emacs Hello.java● javac Hello.java● git status Sur la branche masterModifications 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é: Hello.java
Fichiers non suivis: (utilisez "git add <fichier>..." pour inclure dans ce qui sera validé)
Hello.class
aucune modification n'a été ajoutée à la validation (utilisez "git add" ou "git commit -a")
Bruno Mermet
45
Travail avec un fichierExemple (7)
● git add Hello.java● git status
Sur la branche masterModifications qui seront validées : (utilisez "git reset HEAD <fichier>..." pour désindexer)
modifié: Hello.java
Fichiers non suivis: (utilisez "git add <fichier>..." pour inclure dans ce qui sera validé)
Hello.class
Bruno Mermet
46
Travail avec un fichierExemple (8)
● git commit -m ''message plus long'' ; git status
● git log
Sur la branche masterFichiers non suivis: (utilisez "git add <fichier>..." pour inclure dans ce qui sera validé)
Hello.class
aucune modification ajoutée à la validation mais des fichiers non suivis sont présents (utilisez "git add" pour les suivre)
commit 18ef331bbe4ef1b36cf11e2a712da8945f8c7f00Author: Bruno Mermet <Bruno.Mermet@univ-lehavre.fr>Date: Tue Jun 6 18:23:11 2017 +0200 message plus long
commit fd577c31871eb2c938a5d772dd5a13cd7734fc83Author: Bruno Mermet <Bruno.Mermet@univ-lehavre.fr>Date: Tue Jun 6 12:50:26 2017 +0200
Création du Hello standard
Bruno Mermet
47
Simplifier la prise en comptes des fichiers modifiés
● Pour les fichiers modifiés (pas pour les fichiers créés), on peut remplacer :
– git add fic1 ; git add fic2
– git commit
● Par– git commit -a
Bruno Mermet
48
Travail avec un fichierExemple (9)
● git diff fd577cdiff --git a/Hello.java b/Hello.java
index 4593c25..5f3508d 100644--- a/Hello.java+++ b/Hello.java@@ -1,5 +1,5 @@ public class Hello { public static void main(String... args) {- System.out.println("Hello");+ System.out.print("Hello World"); } }
Bruno Mermet
49
Travailler avec plusieurs fichiers
● Ajouter plusieurs fichiers modifiés– git add repertoire (et notamment git add .)
● Ne pas faire gérer certains fichiers– Utilisation du fichier .gitignore
● Déplacer un fichier en gardant l'historique– git mv
● Faire ignorer un fichier jusqu'à présent pris en compte– git rm
Bruno Mermet
50
Format du fichier .gitignore (à faire gérer par git)
● Ref : https://git-scm.com/docs/gitignore ● 1 motif par ligne● Les lignes vides ne comptent pas● Les lignes commençant par un # sont des commentaires● Principales formes de motif (* = jocker sauf '/')
– chemin– chemin/– !motif– chemin/**/chemin– /chemin
Bruno Mermet
51
Format du fichier .gitignore (à faire gérer par git)
● Ref : https://git-scm.com/docs/gitignore ● 1 motif par ligne● Les lignes vides ne comptent pas● Les lignes commençant par un # sont des commentaires● Principales formes de motif (* = jocker sauf '/')
– chemin– chemin/– !motif– chemin/**/chemin– /chemin
*.class bin/
bin/**/*.class
Bruno Mermet
52
Travail avec un fichierExemple (10) : fichier .gitignore
● Avant création du .gitignore : git status
● Après création du .gitignore
Sur la branche masterFichiers non suivis: (utilisez "git add <fichier>..." pour inclure dans ce qui sera validé)
Hello.class
aucune modification ajoutée à la validation mais des fichiers non suivis sont présents (utilisez "git add" pour les suivre)
Sur la branche masterFichiers non suivis: (utilisez "git add <fichier>..." pour inclure dans ce qui sera validé)
.gitignore
aucune modification ajoutée à la validation mais des fichiers non suivis sont présents (utilisez "git add" pour les suivre)
Bruno Mermet
53
Travail avec un fichierExemple (11) : fichier .gitignore
● Faire gérer le .gitignore à gitgit commit -a -m ''ajout du fichier .gitignore pour ignorer
les fichiers .class''
git status
● git log --oneline
Sur la branche masterrien à valider, la copie de travail est propre
9da7eb1 ajout du fichier .gitignore pour ignorer les fichiers .class18ef331 message plus longfd577c3 Création du Hello standard
Bruno Mermet
54
Étiquetage d'une version
● Étiqueter une version permet de donner un nom à une version particulière pour s'y retrouver.
● Utilisation– git tag -a ''nomVersion''
– git tag -a ''nomVersion'' numVersion
Bruno Mermet
55
Travail avec un fichierExemple (12) : étiquetage
● git tag -a ''v1.0'' ; git log --decorate --oneline
● emacs Hello.java ; git commit -a -m ''au revoir''● git log --decorate --oneline
● git tag -a ''debut'' 9da7eb1 ; git log --decorate --oneline
9da7eb1 (HEAD, tag: v1.0, master) ajout du fichier .gitignore pour ignorer les fichiers .class18ef331 message plus longfd577c3 Création du Hello standard
4712b0f (HEAD, master) au revoir9da7eb1 (tag: v1.0) ajout du fichier .gitignore pour ignorer les fichiers .class18ef331 message plus longfd577c3 Création du Hello standard
4712b0f (HEAD, master) au revoir9da7eb1 (tag: v1.0, tag: debut) ajout du fichier .gitignore pour ignorer les fichiers .class18ef331 message plus longfd577c3 Création du Hello standard
Bruno Mermet
56
Notion de branche● Les Systèmes de Gestion de version permettent de créer
des branches● La création de branches permet de mener des
développements différents à partir d'un point donné, sans qu'il y ait interaction entre les 2 développements
● La fusion de branches est une fonction fondamentale, permettant de ré-intégrer dans une branche le travail fait dans une autre
● Principales utilisations des branches– Développement d'une nouvelle fonctionnalité
– Correctif à une version antérieure
Bruno Mermet
57
Développer une fonctionnalité avec les branches : démarche générale
● Créer une nouvelle branche● Basculer sur la branche créée● Développer sa fonctionnalité
(Régulièrement, intégrer les modifications éventuellement apportées dans la branche de départ)
● Lorsque la fonctionnalité est terminée (développée, documentée, testée)
– Réintégrer la fonctionnalité dans la branche de départ
– Supprimer la branche utilisée
Bruno Mermet
58
Git et les branches● Nom de la branche principale : master● Connaître la liste des branches
– git branch● Créer une branche (sans aller dedans)
– git branch nomBranche● Aller sur une branche donnée
– git checkout nomBranche● Créer une branche et aller dedans
– git checkout -b nomBranche● Supprimer une branche
– git branch -d nomBranche● Intégrer dans la branche courante le contenu d'une autre branche
– git merge nomBranche
Bruno Mermet
59
Travail avec les branchesExemple (1) : situation de départ
● git branch
● git log --decorate --oneline
* master
4712b0f (HEAD, master) au revoir9da7eb1 (tag: v1.0, tag: debut) ajout du fichier .gitignore pour ignorer les fichiers .class18ef331 message plus longfd577c3 Création du Hello standard
Bruno Mermet
60
Travail avec les branchesExemple (2) : créer une fonctionnalité
● git branch ''addition'' ; git branch
● git log --decorate --oneline
● git checkout addition ; git branch
addition* master
4712b0f (HEAD, master, addition) au revoir9da7eb1 (tag: v1.0, tag: debut) ajout du fichier .gitignore pour ignorer les fichiers .class18ef331 message plus longfd577c3 Création du Hello standard
* additionmaster
Bruno Mermet
61
Travail avec les branchesExemple (3) : créer une fonctionnalité
● emacs Operation.java ; emacs Hello.java● javac Hello.java ; git status
● git add . ; git commit -m ''addition, premier essai''
Sur la branche additionModifications 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é: Hello.java
Fichiers non suivis: (utilisez "git add <fichier>..." pour inclure dans ce qui sera validé)
Operation.java
aucune modification n'a été ajoutée à la validation (utilisez "git add" ou "git commit -a")
Bruno Mermet
62
Travail avec les branchesExemple (4) : état de l'historique
● emacs Operation.java ; emacs Hello.java● git add . ; git commit● javac Hello.java● git log --decorate --oneline
45eaaa2 (HEAD, addition) addition, premier essai4712b0f (master) au revoir9da7eb1 (tag: v1.0, tag: debut) ajout du fichier .gitignore pour ignorer les fichiers .class18ef331 message plus longfd577c3 Création du Hello standard
Bruno Mermet
63
Travail avec les branchesExemple (5) : évolution du tronc
● git checkout master● git log --decorate --oneline --all
● emacs Hello.java ; git commit -a -m ''francisation''● git log --decorate --oneline --all --graph
* 0e08bc5 (HEAD, master) francisation| * 45eaaa2 (addition) addition, premier essai|/* 4712b0f au revoir* 9da7eb1 (tag: v1.0, tag: debut) ajout du fichier .gitignore pour ignorer les fichiers .class* 18ef331 message plus long* fd577c3 Création du Hello standard
45eaaa2 (HEAD, addition) addition, premier essai4712b0f (master) au revoir9da7eb1 (tag: v1.0, tag: debut) ajout du fichier .gitignore pour ignorer les fichiers .class18ef331 message plus longfd577c3 Création du Hello standard
Bruno Mermet
64
Travail avec les branchesExemple (6) : reprise du travail dans la branche
● git checkout addition● git log --decorate --oneline --all –graph
● emacs Operation.java ; emacs Hello.java● javac Hello.java● git commit -a -m ''passage par une méthode d'instance''
* 0e08bc5 (master) francisation| * 45eaaa2 (HEAD, addition) addition, premier essai|/* 4712b0f au revoir* 9da7eb1 (tag: v1.0, tag: debut) ajout du fichier .gitignore pour ignorer les fichiers .class* 18ef331 message plus long* fd577c3 Création du Hello standard
Bruno Mermet
65
Travail avec les branchesExemple (7) : état des lieux
● git log --decorate --oneline --all --graph* ca919a2 (HEAD, addition) passage par une méthode d'instance* 45eaaa2 addition, premier essai| * 0e08bc5 (master) francisation|/* 4712b0f au revoir* 9da7eb1 (tag: v1.0, tag: debut) ajout du fichier .gitignore pour ignorer les fichiers .class* 18ef331 message plus long* fd577c3 Création du Hello standard
Bruno Mermet
66
Travail avec les branchesExemple (8) : synchro avec le tronc
● git merge master
● cat Hello.javapublic class Hello { public static void main(String... args) {<<<<<<< HEAD
System.out.print("Hello World");Operation op = new Operation(2,3);System.out.println("2+3="+op.addition());System.out.print("Au revoir");
=======System.out.println("Bonjour");System.out.println("Au revoir");
>>>>>>> master }}
Fusion automatique de Hello.javaCONFLIT (contenu) : Conflit de fusion dans Hello.javaLa fusion automatique a échoué ; réglez les conflits et validez le résultat.
Bruno Mermet
67
Travail avec les branchesExemple (8) : synchro avec le tronc
● git merge master
● cat Hello.javapublic class Hello { public static void main(String... args) {<<<<<<< HEAD
System.out.print("Hello World");Operation op = new Operation(2,3);System.out.println("2+3="+op.addition());System.out.print("Au revoir");
=======System.out.println("Bonjour");System.out.println("Au revoir");
>>>>>>> master }}
Fusion automatique de Hello.javaCONFLIT (contenu) : Conflit de fusion dans Hello.javaLa fusion automatique a échoué ; réglez les conflits et validez le résultat.
Bruno Mermet
68
Travail avec les branchesExemple (8) : synchro avec le tronc
● git merge master
● cat Hello.javapublic class Hello { public static void main(String... args) {<<<<<<< HEAD
System.out.print("Hello World");Operation op = new Operation(2,3);System.out.println("2+3="+op.addition());System.out.print("Au revoir");
=======System.out.println("Bonjour");System.out.println("Au revoir");
>>>>>>> master }}
Fusion automatique de Hello.javaCONFLIT (contenu) : Conflit de fusion dans Hello.javaLa fusion automatique a échoué ; réglez les conflits et validez le résultat.
Bruno Mermet
69
Travail avec les branchesExemple (8) : synchro avec le tronc
● git merge master
● cat Hello.javapublic class Hello { public static void main(String... args) {<<<<<<< HEAD
System.out.print("Hello World");Operation op = new Operation(2,3);System.out.println("2+3="+op.addition());System.out.print("Au revoir");
=======System.out.println("Bonjour");System.out.println("Au revoir");
>>>>>>> master }}
Fusion automatique de Hello.javaCONFLIT (contenu) : Conflit de fusion dans Hello.javaLa fusion automatique a échoué ; réglez les conflits et validez le résultat.
Bruno Mermet
70
Travail avec les branchesExemple (8) : résolution du conflit
● emacs Hello.java ; cat Hello.java
● git commit -a -m ''intégration des modifs du tronc''
public class Hello { public static void main(String... args) {
System.out.println("Bonjour");Operation op = new Operation(2,3);System.out.println("2+3="+op.addition());System.out.println("Au revoir");
}}
* ddb2758 (HEAD, addition) intégration des modifs du tronc|\ | * 0e08bc5 (master) francisation* | ca919a2 passage par une méthode d'instance* | 45eaaa2 addition, premier essai|/ * 4712b0f au revoir* 9da7eb1 (tag: v1.0, tag: debut) ajout du fichier .gitignore pour ignorer les fichiers .class* 18ef331 message plus long* fd577c3 Création du Hello standard
Bruno Mermet
71
Résolution de conflitUtilisation d'outils externes (1)
● Principe Lorsqu'un conflit est détecté, git mergetool permet d'utiliser un
outil externe pour aider à la résolution du conflit● Mise en œuvre avec Meld
– sudo apt-get install meld– git config --global merge.tool meld– Après un « git merge » indiquant un conflit, lancer
git mergetool
Merging:Hello.java
Normal merge conflict for 'Hello.java': {local}: modified file {remote}: modified fileHit return to start merge resolution tool (meld):
Bruno Mermet
72
Résolution de conflitUtilisation d'outils externes (2)
Bruno Mermet
73
Résolution de conflitUtilisation d'outils externes (3)
● Définition de points de synchronisation
Bruno Mermet
74
Résolution de conflitUtilisation d'outils externes (3)
● Après clic /Shift-clic/Ctrl-clic sur les bonnes flèches
Bruno Mermet
75
Résolution de conflitUtilisation d'outils externes (4)
● Après sauvegarde, git status
● rm Hello.java.orig● git commit
Tous les conflits sont réglés mais la fusion n'est pas terminée. (utilisez "git commit" pour terminer la fusion)
Modifications qui seront validées :
modifié: Hello.java
Fichiers non suivis: (utilisez "git add <fichier>..." pour inclure dans ce qui sera validé)
Hello.java.orig
Bruno Mermet
76
Travail avec les branchesExemple (9) : fin du dvlpt de la fonc.
● emacs Hello.java● git commit -a -m ''finalisation addition''● git log --decorate --oneline --all --graph* ed75c55 (HEAD, addition) finalisation addition* ddb2758 intégration des modifs du tronc|\ | * 0e08bc5 (master) francisation* | ca919a2 passage par une méthode d'instance* | 45eaaa2 addition, premier essai|/ * 4712b0f au revoir* 9da7eb1 (tag: v1.0, tag: debut) ajout du fichier .gitignore pour ignorer les fichiers .class* 18ef331 message plus long* fd577c3 Création du Hello standard
Bruno Mermet
77
Travail avec les branchesExemple (10) : retour sur le tronc
● ls
● git checkout master● ls
● git log --decorate --oneline --all --graph* ed75c55 (addition) finalisation addition* ddb2758 intégration des modifs du tronc|\ | * 0e08bc5 (HEAD, master) francisation* | ca919a2 passage par une méthode d'instance* | 45eaaa2 addition, premier essai|/ * 4712b0f au revoir* 9da7eb1 (tag: v1.0, tag: debut) ajout du fichier .gitignore pour ignorer les fichiers .class* 18ef331 message plus long* fd577c3 Création du Hello standard
Hello.class Hello.java Operation.class Operation.java
Hello.class Hello.java Operation.class
Bruno Mermet
78
Travail avec les branchesExemple (11) : intégration de la fonc.
● Git merge addition
● git log --decorate --oneline --all --graph* ed75c55 (HEAD, master, addition) finalisation addition* ddb2758 intégration des modifs du tronc|\ | * 0e08bc5 francisation* | ca919a2 passage par une méthode d'instance* | 45eaaa2 addition, premier essai|/ * 4712b0f au revoir* 9da7eb1 (tag: v1.0, tag: debut) ajout du fichier .gitignore pour ignorer les fichiers .class* 18ef331 message plus long* fd577c3 Création du Hello standard
Mise à jour 0e08bc5..ed75c55Fast-forward Hello.java | 4 ++++ Operation.java | 12 ++++++++++++ 2 files changed, 16 insertions(+) create mode 100644 Operation.java
Bruno Mermet
79
Travail avec les branchesExemple (12) : suppression branche
● git branch -d addition● git branch -a
● git tag -a ''v1.1''● git log --decorate --oneline --all --graph* ed75c55 (HEAD, tag: v1.1, master) finalisation addition* ddb2758 intégration des modifs du tronc|\ | * 0e08bc5 francisation* | ca919a2 passage par une méthode d'instance* | 45eaaa2 addition, premier essai|/ * 4712b0f au revoir* 9da7eb1 (tag: v1.0, tag: debut) ajout du fichier .gitignore pour ignorer les fichiers .class* 18ef331 message plus long* fd577c3 Création du Hello standard
* master
Bruno Mermet
80
gestion des révisions par GITUne affaire de pointeurs
master branche Bétiquette a
branche Aétiquette b
1 2 3
4 6
7
9
10
8 11 13
1412
5
head
Bruno Mermet
81
Gestion des révisions par GITPoint de vue depuis « master » (1/6)
master branche B
étiquette a
branche A
étiquette b
1 2 3
4 6
7
9
10
8 11 13
1412
5
head
Bruno Mermet
82
Gestion des révisions par GITPoint de vue depuis « master » (2/6)
master branche B
étiquette a
branche A
étiquette b
1 2 3
4 6
7
9
10
8 11
1412
5
head
Bruno Mermet
83
Gestion des révisions par GITPoint de vue depuis « master » (3/6)
master branche B
étiquette a
branche A
étiquette b
1 2 3
4 6
7
9
10
8 11
1412
5
head
Bruno Mermet
84
Gestion des révisions par GITPoint de vue depuis « master » (4/6)
master branche B
étiquette a
branche A
étiquette b
1 2 3
4 6
7
9
10
8
1412
5
head
Bruno Mermet
85
Gestion des révisions par GITPoint de vue depuis « master » (5/6)
master branche B
étiquette a
branche A
étiquette b
1 2 3
4 6
7 10
8
1412
5
head
Bruno Mermet
86
Gestion des révisions par GITPoint de vue depuis « master » (6/6)
master branche B
étiquette a
branche A
étiquette b
1 2 3
4 6
7 10
8
1412
head
Bruno Mermet
87
gestion des révisions par GITNouveau commit sur la branche A (1/2)
master branche Bétiquette a
branche Aétiquette b
1 2 3
4 6
7
9
10
8 11 13
1412
5
head
Bruno Mermet
88
gestion des révisions par GITNouveau commit sur la branche A (2/2)
master branche Bétiquette a
branche Aétiquette b
1 2 3
4 6
7
9
10
8 11 13
1412
5
15
head
Bruno Mermet
89
gestion des révisions par GITSuppression de la branche B (1/3)
master branche Bétiquette a
branche Aétiquette b
1 2 3
4 6
7
9
10
8 11 13
1412
5
head
Bruno Mermet
90
gestion des révisions par GITSuppression de la branche B (2/3)
masterétiquette a
branche Aétiquette b
1 2 3
4 6
7
9
10
8 11 13
1412
5
head
Bruno Mermet
91
gestion des révisions par GITSuppression de la branche B (3/3)
masterétiquette a
branche Aétiquette b
1 2 3
4 6
7
9
10
8 11 13
1412
5
head
Bruno Mermet
92
gestion des révisions par GITRévisions inaccessibles (1/3)
masterétiquette a
branche Aétiquette b
1 2 3
4 6
7
9
10
8 11 13
1412
5
head
Bruno Mermet
93
gestion des révisions par GITRévisions inaccessibles (2/3)
masterétiquette a
branche Aétiquette b
1 2 3
4 6
7
9
10
8 11 13
1412
5
head
Bruno Mermet
94
gestion des révisions par GITRévisions inaccessibles (3/3)
masterétiquette a
branche Aétiquette b
1 2 3
4 6
7
9
10
8 11 13
1412
5
head
Les révisions 5, 11 et 13 sont inaccessiblesOn peut cependant les retrouver avec un :git log reflog
Bruno Mermet
95
gestion des révisions par GITRécupération d'une version spécifique
master branche Bétiquette a
branche Aétiquette b
1 2 3
4 6
7
9
10
8 11 13
1412
5
head
git checkout ''étiquette a'' ou git checkout 2
Bruno Mermet
96
gestion des révisions par GITRécupération d'une version spécifique
master branche Bétiquette a
branche Aétiquette b
1 2 3
4 6
7
9
10
8 11 13
1412
5
head
git checkout ''étiquette a'' ou git checkout 2
Bruno Mermet
97
gestion des révisions par GITRécupération d'une version spécifique
master branche Bétiquette a
branche Aétiquette b
1 2 3
4 6
7
9
10
8 11 13
1412
5
head
git checkout ''étiquette a'' ou git checkout 2
Le Pointeur « head » ne pointe plus sur une brancheOn parle de « detached head »On peut créer une branche, sur laquelle head pointera, avec un : git checkout –b nouvelleBrancheOn peut aussi faire directement un git checkout 2 –b nouvelleBrancheOu un git checkout étiquetteA –b nouvelleBranche
Bruno Mermet
98
Principe de la fusion de branche1. Plus jeune ancêtre commun (1/3)
master branche Bétiquette a
branche Aétiquette b
1 2 3
4 6
7
9
10
8 11 13
1412
5
head
git checkout master ; git merge brancheB
Bruno Mermet
99
Principe de la fusion de branche1. Plus jeune ancêtre commun (2/3)
master branche B
1 2 3
4 6
7 10
8 11 13
1412
head
git checkout master ; git merge brancheB
Bruno Mermet
100
Principe de la fusion de branche1. Plus jeune ancêtre commun (3/3)
master branche B
3
13
14
head
git checkout master ; git merge brancheB
Bruno Mermet
101
Principe de la fusion de branche2. Recherche des différences dans le code
ligne 1ligne 2ligne 3ligne 4ligne 5ligne 6ligne 7ligne 8ligne 9ligne 10ligne 11ligne 12
ligne 1ajout a1ligne 2ligne 3ligne 4ligne 5ajout a2ligne 6ligne 7
ligne 9ligne 10
ligne 12
ligne 1ligne 2ligne 3ligne 5ajout a3ligne 6ligne 7ligne 8ligne 9ligne 10ligne 11ajout a4ligne 12
Ancêtre commun Dernier master Dernier brancheB Fusion
Bruno Mermet
102
Principe de la fusion de branche2. Recherche des différences dans le code
ligne 1ligne 2ligne 3ligne 4ligne 5ligne 6ligne 7ligne 8ligne 9ligne 10ligne 11ligne 12
ligne 1ajout a1ligne 2ligne 3ligne 4ligne 5ajout a2ligne 6ligne 7
ligne 9ligne 10
ligne 12
ligne 1ligne 2ligne 3ligne 5ajout a3ligne 6ligne 7ligne 8ligne 9ligne 10ligne 11ajout a4ligne 12
Ancêtre commun Dernier master Dernier brancheB Fusion
Bruno Mermet
103
Principe de la fusion de branche2. Recherche des différences dans le code
ligne 1ligne 2ligne 3ligne 4ligne 5ligne 6ligne 7ligne 8ligne 9ligne 10ligne 11ligne 12
ligne 1ajout a1ligne 2ligne 3ligne 4ligne 5ajout a2ligne 6ligne 7
ligne 9ligne 10
ligne 12
ligne 1ligne 2ligne 3ligne 5ajout a3ligne 6ligne 7ligne 8ligne 9ligne 10ligne 11ajout a4ligne 12
Ancêtre commun Dernier master Dernier brancheB Fusion
ligne 1
Bruno Mermet
104
Principe de la fusion de branche2. Recherche des différences dans le code
ligne 1ligne 2ligne 3ligne 4ligne 5ligne 6ligne 7ligne 8ligne 9ligne 10ligne 11ligne 12
ligne 1ajout a1ligne 2ligne 3ligne 4ligne 5ajout a2ligne 6ligne 7
ligne 9ligne 10
ligne 12
ligne 1ligne 2ligne 3ligne 5ajout a3ligne 6ligne 7ligne 8ligne 9ligne 10ligne 11ajout a4ligne 12
Ancêtre commun Dernier master Dernier brancheB Fusion
ligne 1
Bruno Mermet
105
Principe de la fusion de branche2. Recherche des différences dans le code
ligne 1ligne 2ligne 3ligne 4ligne 5ligne 6ligne 7ligne 8ligne 9ligne 10ligne 11ligne 12
ligne 1ajout a1ligne 2ligne 3ligne 4ligne 5ajout a2ligne 6ligne 7
ligne 9ligne 10
ligne 12
ligne 1ligne 2ligne 3ligne 5ajout a3ligne 6ligne 7ligne 8ligne 9ligne 10ligne 11ajout a4ligne 12
Ancêtre commun Dernier master Dernier brancheB Fusion
ligne 1ajout a1
Bruno Mermet
106
Principe de la fusion de branche2. Recherche des différences dans le code
ligne 1ligne 2ligne 3ligne 4ligne 5ligne 6ligne 7ligne 8ligne 9ligne 10ligne 11ligne 12
ligne 1ajout a1ligne 2ligne 3ligne 4ligne 5ajout a2ligne 6ligne 7
ligne 9ligne 10
ligne 12
ligne 1ligne 2ligne 3ligne 5ajout a3ligne 6ligne 7ligne 8ligne 9ligne 10ligne 11ajout a4ligne 12
Ancêtre commun Dernier master Dernier brancheB Fusion
ligne 1ajout a1
Bruno Mermet
107
Principe de la fusion de branche2. Recherche des différences dans le code
ligne 1ligne 2ligne 3ligne 4ligne 5ligne 6ligne 7ligne 8ligne 9ligne 10ligne 11ligne 12
ligne 1ajout a1ligne 2ligne 3ligne 4ligne 5ajout a2ligne 6ligne 7
ligne 9ligne 10
ligne 12
ligne 1ligne 2ligne 3ligne 5ajout a3ligne 6ligne 7ligne 8ligne 9ligne 10ligne 11ajout a4ligne 12
Ancêtre commun Dernier master Dernier brancheB Fusion
ligne 1ajout a1ligne 2ligne 3
Bruno Mermet
108
Principe de la fusion de branche2. Recherche des différences dans le code
ligne 1ligne 2ligne 3ligne 4ligne 5ligne 6ligne 7ligne 8ligne 9ligne 10ligne 11ligne 12
ligne 1ajout a1ligne 2ligne 3ligne 4ligne 5ajout a2ligne 6ligne 7
ligne 9ligne 10
ligne 12
ligne 1ligne 2ligne 3ligne 5ajout a3ligne 6ligne 7ligne 8ligne 9ligne 10ligne 11ajout a4ligne 12
Ancêtre commun Dernier master Dernier brancheB Fusion
ligne 1ajout a1ligne 2ligne 3
Bruno Mermet
109
Principe de la fusion de branche2. Recherche des différences dans le code
ligne 1ligne 2ligne 3ligne 4ligne 5ligne 6ligne 7ligne 8ligne 9ligne 10ligne 11ligne 12
ligne 1ajout a1ligne 2ligne 3ligne 4ligne 5ajout a2ligne 6ligne 7
ligne 9ligne 10
ligne 12
ligne 1ligne 2ligne 3ligne 5ajout a3ligne 6ligne 7ligne 8ligne 9ligne 10ligne 11ajout a4ligne 12
Ancêtre commun Dernier master Dernier brancheB Fusion
ligne 1ajout a1ligne 2ligne 3
Bruno Mermet
110
Principe de la fusion de branche2. Recherche des différences dans le code
ligne 1ligne 2ligne 3ligne 4ligne 5ligne 6ligne 7ligne 8ligne 9ligne 10ligne 11ligne 12
ligne 1ajout a1ligne 2ligne 3ligne 4ligne 5ajout a2ligne 6ligne 7
ligne 9ligne 10
ligne 12
ligne 1ligne 2ligne 3ligne 5ajout a3ligne 6ligne 7ligne 8ligne 9ligne 10ligne 11ajout a4ligne 12
Ancêtre commun Dernier master Dernier brancheB Fusion
ligne 1ajout a1ligne 2ligne 3
Bruno Mermet
111
Principe de la fusion de branche2. Recherche des différences dans le code
ligne 1ligne 2ligne 3ligne 4ligne 5ligne 6ligne 7ligne 8ligne 9ligne 10ligne 11ligne 12
ligne 1ajout a1ligne 2ligne 3ligne 4ligne 5ajout a2ligne 6ligne 7
ligne 9ligne 10
ligne 12
ligne 1ligne 2ligne 3ligne 5ajout a3ligne 6ligne 7ligne 8ligne 9ligne 10ligne 11ajout a4ligne 12
Ancêtre commun Dernier master Dernier brancheB Fusion
ligne 1ajout a1ligne 2ligne 3
ligne 5
Bruno Mermet
112
Principe de la fusion de branche2. Recherche des différences dans le code
ligne 1ligne 2ligne 3ligne 4ligne 5ligne 6ligne 7ligne 8ligne 9ligne 10ligne 11ligne 12
ligne 1ajout a1ligne 2ligne 3ligne 4ligne 5ajout a2ligne 6ligne 7
ligne 9ligne 10
ligne 12
ligne 1ligne 2ligne 3ligne 5ajout a3ligne 6ligne 7ligne 8ligne 9ligne 10ligne 11ajout a4ligne 12
Ancêtre commun Dernier master Dernier brancheB Fusion
ligne 1ajout a1ligne 2ligne 3
ligne 5
Bruno Mermet
113
Principe de la fusion de branche2. Recherche des différences dans le code
ligne 1ligne 2ligne 3ligne 4ligne 5ligne 6ligne 7ligne 8ligne 9ligne 10ligne 11ligne 12
ligne 1ajout a1ligne 2ligne 3ligne 4ligne 5ajout a2ligne 6ligne 7
ligne 9ligne 10
ligne 12
ligne 1ligne 2ligne 3ligne 5ajout a3ligne 6ligne 7ligne 8ligne 9ligne 10ligne 11ajout a4ligne 12
Ancêtre commun Dernier master Dernier brancheB Fusion
ligne 1ajout a1ligne 2ligne 3
ligne 5
Bruno Mermet
114
Principe de la fusion de branche2. Recherche des différences dans le code
ligne 1ligne 2ligne 3ligne 4ligne 5ligne 6ligne 7ligne 8ligne 9ligne 10ligne 11ligne 12
ligne 1ajout a1ligne 2ligne 3ligne 4ligne 5ajout a2ligne 6ligne 7
ligne 9ligne 10
ligne 12
ligne 1ligne 2ligne 3ligne 5ajout a3ligne 6ligne 7ligne 8ligne 9ligne 10ligne 11ajout a4ligne 12
Ancêtre commun Dernier master Dernier brancheB Fusion
ligne 1ajout a1ligne 2ligne 3
ligne 5??????
Bruno Mermet
115
Principe de la fusion de branche2. Recherche des différences dans le code
ligne 1ligne 2ligne 3ligne 4ligne 5ligne 6ligne 7ligne 8ligne 9ligne 10ligne 11ligne 12
ligne 1ajout a1ligne 2ligne 3ligne 4ligne 5ajout a2ligne 6ligne 7
ligne 9ligne 10
ligne 12
ligne 1ligne 2ligne 3ligne 5ajout a3ligne 6ligne 7ligne 8ligne 9ligne 10ligne 11ajout a4ligne 12
Ancêtre commun Dernier master Dernier brancheB Fusion
ligne 1ajout a1ligne 2ligne 3
ligne 5??????
Bruno Mermet
116
Principe de la fusion de branche2. Recherche des différences dans le code
ligne 1ligne 2ligne 3ligne 4ligne 5ligne 6ligne 7ligne 8ligne 9ligne 10ligne 11ligne 12
ligne 1ajout a1ligne 2ligne 3ligne 4ligne 5ajout a2ligne 6ligne 7
ligne 9ligne 10
ligne 12
ligne 1ligne 2ligne 3ligne 5ajout a3ligne 6ligne 7ligne 8ligne 9ligne 10ligne 11ajout a4ligne 12
Ancêtre commun Dernier master Dernier brancheB Fusion
ligne 1ajout a1ligne 2ligne 3
ligne 5??????ligne 6ligne 7
Bruno Mermet
117
Principe de la fusion de branche2. Recherche des différences dans le code
ligne 1ligne 2ligne 3ligne 4ligne 5ligne 6ligne 7ligne 8ligne 9ligne 10ligne 11ligne 12
ligne 1ajout a1ligne 2ligne 3ligne 4ligne 5ajout a2ligne 6ligne 7
ligne 9ligne 10
ligne 12
ligne 1ligne 2ligne 3ligne 5ajout a3ligne 6ligne 7ligne 8ligne 9ligne 10ligne 11ajout a4ligne 12
Ancêtre commun Dernier master Dernier brancheB Fusion
ligne 1ajout a1ligne 2ligne 3
ligne 5??????ligne 6ligne 7
Bruno Mermet
118
Principe de la fusion de branche2. Recherche des différences dans le code
ligne 1ligne 2ligne 3ligne 4ligne 5ligne 6ligne 7ligne 8ligne 9ligne 10ligne 11ligne 12
ligne 1ajout a1ligne 2ligne 3ligne 4ligne 5ajout a2ligne 6ligne 7
ligne 9ligne 10
ligne 12
ligne 1ligne 2ligne 3ligne 5ajout a3ligne 6ligne 7ligne 8ligne 9ligne 10ligne 11ajout a4ligne 12
Ancêtre commun Dernier master Dernier brancheB Fusion
ligne 1ajout a1ligne 2ligne 3
ligne 5??????ligne 6ligne 7
Bruno Mermet
119
Principe de la fusion de branche2. Recherche des différences dans le code
ligne 1ligne 2ligne 3ligne 4ligne 5ligne 6ligne 7ligne 8ligne 9ligne 10ligne 11ligne 12
ligne 1ajout a1ligne 2ligne 3ligne 4ligne 5ajout a2ligne 6ligne 7
ligne 9ligne 10
ligne 12
ligne 1ligne 2ligne 3ligne 5ajout a3ligne 6ligne 7ligne 8ligne 9ligne 10ligne 11ajout a4ligne 12
Ancêtre commun Dernier master Dernier brancheB Fusion
ligne 1ajout a1ligne 2ligne 3
ligne 5??????ligne 6ligne 7
Bruno Mermet
120
Principe de la fusion de branche2. Recherche des différences dans le code
ligne 1ligne 2ligne 3ligne 4ligne 5ligne 6ligne 7ligne 8ligne 9ligne 10ligne 11ligne 12
ligne 1ajout a1ligne 2ligne 3ligne 4ligne 5ajout a2ligne 6ligne 7
ligne 9ligne 10
ligne 12
ligne 1ligne 2ligne 3ligne 5ajout a3ligne 6ligne 7ligne 8ligne 9ligne 10ligne 11ajout a4ligne 12
Ancêtre commun Dernier master Dernier brancheB Fusion
ligne 1ajout a1ligne 2ligne 3
ligne 5??????ligne 6ligne 7
ligne 9ligne 10
Bruno Mermet
121
Principe de la fusion de branche2. Recherche des différences dans le code
ligne 1ligne 2ligne 3ligne 4ligne 5ligne 6ligne 7ligne 8ligne 9ligne 10ligne 11ligne 12
ligne 1ajout a1ligne 2ligne 3ligne 4ligne 5ajout a2ligne 6ligne 7
ligne 9ligne 10
ligne 12
ligne 1ligne 2ligne 3ligne 5ajout a3ligne 6ligne 7ligne 8ligne 9ligne 10ligne 11ajout a4ligne 12
Ancêtre commun Dernier master Dernier brancheB Fusion
ligne 1ajout a1ligne 2ligne 3
ligne 5??????ligne 6ligne 7
ligne 9ligne 10
Bruno Mermet
122
Principe de la fusion de branche2. Recherche des différences dans le code
ligne 1ligne 2ligne 3ligne 4ligne 5ligne 6ligne 7ligne 8ligne 9ligne 10ligne 11ligne 12
ligne 1ajout a1ligne 2ligne 3ligne 4ligne 5ajout a2ligne 6ligne 7
ligne 9ligne 10
ligne 12
ligne 1ligne 2ligne 3ligne 5ajout a3ligne 6ligne 7ligne 8ligne 9ligne 10ligne 11ajout a4ligne 12
Ancêtre commun Dernier master Dernier brancheB Fusion
ligne 1ajout a1ligne 2ligne 3
ligne 5??????ligne 6ligne 7
ligne 9ligne 10
Bruno Mermet
123
Principe de la fusion de branche2. Recherche des différences dans le code
ligne 1ligne 2ligne 3ligne 4ligne 5ligne 6ligne 7ligne 8ligne 9ligne 10ligne 11ligne 12
ligne 1ajout a1ligne 2ligne 3ligne 4ligne 5ajout a2ligne 6ligne 7
ligne 9ligne 10
ligne 12
ligne 1ligne 2ligne 3ligne 5ajout a3ligne 6ligne 7ligne 8ligne 9ligne 10ligne 11ajout a4ligne 12
Ancêtre commun Dernier master Dernier brancheB Fusion
ligne 1ajout a1ligne 2ligne 3
ligne 5??????ligne 6ligne 7
ligne 9ligne 10??????
Bruno Mermet
124
Principe de la fusion de branche2. Recherche des différences dans le code
ligne 1ligne 2ligne 3ligne 4ligne 5ligne 6ligne 7ligne 8ligne 9ligne 10ligne 11ligne 12
ligne 1ajout a1ligne 2ligne 3ligne 4ligne 5ajout a2ligne 6ligne 7
ligne 9ligne 10
ligne 12
ligne 1ligne 2ligne 3ligne 5ajout a3ligne 6ligne 7ligne 8ligne 9ligne 10ligne 11ajout a4ligne 12
Ancêtre commun Dernier master Dernier brancheB Fusion
ligne 1ajout a1ligne 2ligne 3
ligne 5??????ligne 6ligne 7
ligne 9ligne 10??????
Bruno Mermet
125
Principe de la fusion de branche2. Recherche des différences dans le code
ligne 1ligne 2ligne 3ligne 4ligne 5ligne 6ligne 7ligne 8ligne 9ligne 10ligne 11ligne 12
ligne 1ajout a1ligne 2ligne 3ligne 4ligne 5ajout a2ligne 6ligne 7
ligne 9ligne 10
ligne 12
ligne 1ligne 2ligne 3ligne 5ajout a3ligne 6ligne 7ligne 8ligne 9ligne 10ligne 11ajout a4ligne 12
Ancêtre commun Dernier master Dernier brancheB Fusion
ligne 1ajout a1ligne 2ligne 3
ligne 5??????ligne 6ligne 7
ligne 9ligne 10??????
ligne 12
Bruno Mermet
126
Principe de la fusion de branche2. Recherche des différences dans le code
ligne 1ligne 2ligne 3ligne 4ligne 5ligne 6ligne 7ligne 8ligne 9ligne 10ligne 11ligne 12
ligne 1ajout a1ligne 2ligne 3ligne 4ligne 5ajout a2ligne 6ligne 7
ligne 9ligne 10
ligne 12
ligne 1ligne 2ligne 3ligne 5ajout a3ligne 6ligne 7ligne 8ligne 9ligne 10ligne 11ajout a4ligne 12
Ancêtre commun Dernier master Dernier brancheB Fusion
ligne 1ajout a1ligne 2ligne 3
ligne 5??????ligne 6ligne 7
ligne 9ligne 10??????
ligne 12
Bruno Mermet
127
Principe de la fusion de branche2. Recherche des différences dans le code
ligne 1ligne 2ligne 3ligne 4ligne 5ligne 6ligne 7ligne 8ligne 9ligne 10ligne 11ligne 12
ligne 1ajout a1ligne 2ligne 3ligne 4ligne 5ajout a2ligne 6ligne 7
ligne 9ligne 10
ligne 12
ligne 1ligne 2ligne 3ligne 5ajout a3ligne 6ligne 7ligne 8ligne 9ligne 10ligne 11ajout a4ligne 12
Ancêtre commun Dernier master Dernier brancheB Fusion
ligne 1ajout a1ligne 2ligne 3
ligne 5??????ligne 6ligne 7
ligne 9ligne 10??????
ligne 12
ligne 1ajout a1ligne 2ligne 3ligne 5
<<<<<<< HEADajout a2=======ajout a3>>>>>>> brancheB
ligne 6ligne 7ligne 9
ligne 10<<<<<<< HEAD=======ligne 11ajout a4>>>>>>> brancheB
ligne 12
top related