Presque tous les systèmes de contrôle de version ont des options de branchement. Mais Git est connu pour ses capacités de branchement rapide. Les branches Git sont légères. Ainsi, les pénalités de performances pour la création de branches sont minimes et les équipes de développement sont encouragées à créer des branches et à fusionner autant que possible. Mais lorsque vous travaillez avec plusieurs branches, il est important de pouvoir comparer et contraster les différences. Dans ce tutoriel, nous allons parcourir un workflow pour voir comment comparer différentes branches et commits.Mettons d'abord en place la situation suivante :
C00 => C01 => C03 => C06 (maître)
\
C02 => C04 => C05 (développement)
Les mesures suivantes ont été prises :
- C00 : ajout de hello_world.py (branche principale)
- - Création de la branche développement
- C01 : hello_world modifié.py pour ajouter un deuxième bonjour (branche master)
- C02 : hello_world modifié.py pour ajouter la branche de développement dit Bonjour (branche de développement)
- C03 : Ajout du fichier readme.txt (branche principale)
- C04 : hello_world modifié.py pour ajouter la branche de développement dit à nouveau bonjour (branche de développement)
- C05 : Ajout d'informations.txt (branche de développement)
- C06 : Lisez-moi modifié.txt pour ajouter une deuxième ligne (branche principale)
Après tous les commits, la branche 'master' contient les fichiers suivants :
Bonjour le monde.py
Lisez-moi.SMS
Et la branche 'développement' contient les fichiers suivants :
Bonjour le monde.py
Info.SMS
Comparer les têtes de deux branches
Vous pouvez utiliser le nom des branches pour comparer les têtes de deux branches :
$ git diff master… développementdiff --git a/hello_world.py b/hello_world.py
indice e27f806… 3899ed3 100644
--- a/hello_world.py
+++ b/hello_world.py
@@ -2,7 +2,7 @@
def principal() :
print("Premier bonjour!")
- print("Deuxième bonjour!")
-
+ print("La branche de développement dit bonjour")
+ print("La branche de développement dit à nouveau bonjour")
if __name__ == "__main__":
principale()
diff --git a/info.txt b/info.SMS
nouveau mode de fichier 100644
indice 0000000… 0ab52fd
--- /dev/null
+++ b/info.SMS
@@ -0,0 +1 @@
+Nouvelle information
diff --git a/readme.txt b/readme.SMS
mode de fichier supprimé 100644
indice e29c296… 0000000
--- un/lisez-moi.SMS
+++ /dev/null
@@ -1,2 +0,0 @@
-1 Première ligne du fichier readme.SMS
-2 Deuxième ligne du fichier readme.SMS
La commande diff examine de manière récursive les modifications. Il a exécuté les diffs suivants :
diff -git a/hello_world.py b/hello_world.py
diff -git a/info.txt b/info.SMS
diff -git a/readme.txt b/readme.SMS
Ici 'a' représente la branche 'master' et 'b' représente la branche de développement. Le 'a' est toujours assigné au premier paramètre et 'b' au deuxième paramètre. Le /dev/null signifie que la branche n'a pas le fichier.
Comparaison entre les commits
Dans notre exemple, la branche 'master' a les commits suivants :
$ git statutSur le maître de branche
rien à valider, répertoire de travail propre
$ git log --oneline
caa0ddd C06 : Lisez-moi modifié.txt pour ajouter une deuxième ligne (branche principale)
efaba94 C03 : Ajout du fichier readme.txt (branche principale)
ee60eac C01 : hello_world modifié.py pour ajouter un deuxième bonjour (branche master)
22b4bf9 C00 : Ajout de hello_world.py (branche principale)
La branche de développement a les commits suivants :
$ git statutSur le développement de la branche
rien à valider, répertoire de travail propre
$ git log --oneline
df3a4ee C05 : informations ajoutées.txt (branche de développement)
0f0abb8 C04 : hello_world modifié.py pour ajouter la branche de développement dit à nouveau bonjour (branche de développement)
3f611a0 C02 : hello_world modifié.py pour ajouter la branche de développement dit Bonjour (branche de développement)
22b4bf9 C00 : Ajout de hello_world.py (branche principale)
Supposons que nous voulions comparer le hello_world.py pour les commits C01 et C02. Vous pouvez utiliser les hachages pour comparer :
$ git diff ee60eac:hello_world.py 3f611a0:hello_world.pydiff --git a/ee60eac:hello_world.py b/3f611a0:hello_world.py
indice e27f806… 72a178d 100644
--- a/ee60eac:hello_world.py
+++ b/3f611a0:hello_world.py
@@ -2,7 +2,7 @@
def principal() :
print("Premier bonjour!")
- print("Deuxième bonjour!")
+ print("La branche de développement dit bonjour")
if __name__ == "__main__":
principale()
Vous pouvez utiliser le même principe pour comparer les commits au sein de la même branche également.
Outils de fusion visuelle
Il peut être difficile d'examiner des comparaisons textuelles. Si vous configurez Git difftool avec une application de fusion visuelle comme DiffMerge ou BeyondCompare, vous pourrez mieux voir les différences.
Une étude plus approfondie:
- Documentation Git Diff
- Git DiffTool Documentation
- Configuration de DiffMerge avec DiffTool
- Configuration BeyondCompare avec DiffTool
Les références:
- Tutoriel Git : outils de différenciation et de fusion, YouTube
- http://coding4streetcred.com/blog/post/configure-diffmerge-for-your-git-difftool
- http://gitbaby.com/how-to-diff-one-file-to-an-arbitrary-version-in-git.html
- https://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging
- https://git-scm.com/book/id/v2/Git-Branching-Branches-in-a-Nutshell
- https://git-scm.com/docs/git-diff
- https://git-scm.com/docs/git-difftool
- https://sourcegear.com/diffmerge/
- https://sourcegear.com/diffmerge/webhelp/sec__git__linux.html
- https://stackoverflow.com/questions/9834689/comparing-two-branches-in-git
- https://veerasundar.com/blog/2011/06/git-tutorial-comparing-files-with-diff/
- https://www.scooterlogiciel.com/fonctionnalités.php
- https://www.scooterlogiciel.com/assistance.php?zz=kb_vcs