Apprenez en lisant dans l'ordre

Différences entre fichiers — diff

Découvre comment vérifier les différences entre deux fichiers avec diff. Tu liras quelles lignes ont été ajoutées, supprimées ou modifiées, à l'aide de schémas et d'un terminal interactif directement dans ton navigateur.

Quand utiliser diff

Utilise-le quand tu veux vérifier ce que tu as changé après avoir édité un fichier, ou si deux fichiers ont le même contenu. Donne-lui deux fichiers et il n'affiche que les lignes qui diffèrent.

Comparer deux fichiers — diff

diff compare deux fichiers et n'affiche que les parties qui diffèrent. Tu l'utilises sous la forme diff old.txt new.txt, en traitant le premier fichier comme la version ancienne (avant) et le second comme la version nouvelle (après). Les lignes identiques ne sont pas affichées — seules les différences sont signalées.

Comparer deux fichiers avec diff
old.txtapple / banana / cherrynew.txtapple / grape / cherrydiffSortie-banana+grapeanciennouveauaffiche le diffles deux fichiers comparés
diff old.txt new.txt aligne les deux fichiers et n'affiche que la deuxième ligne différente, sous la forme -banana (ancien) et +grape (nouveau). Les apple et cherry identiques ne sont pas affichés.

Dans le terminal du navigateur, diff affiche les différences au format unifié (unified format). Les --- et +++ en tête sont les noms des deux fichiers comparés, la ligne @@ indique où le changement s'est produit, et dans le corps chaque ligne supprimée commence par - et chaque ligne ajoutée par +. Les lignes inchangées commencent par une espace et apparaissent à côté comme contexte.

SymboleSignification
--- old.txtNom du premier fichier (ancien) comparé
+++ new.txtNom du second fichier (nouveau) comparé
@@ -N,M +N,M @@Information de position : où le changement s'est produit
- ligneUne ligne supprimée (présente dans l'ancien fichier)
+ ligneUne ligne ajoutée (présente dans le nouveau fichier)
ligne (espace au début)Une ligne inchangée affichée à côté comme contexte
Lire le format unifié
Ligne supprimée(ancien fichier)@@ -1,3 +1,3 @@Indique où lechangement a lieu- banana+ grapeLigne ajoutée(nouveau fichier)
Au format unifié, @@ indique la position du changement, - une ligne supprimée (ancien) et + une ligne ajoutée (nouveau). Les lignes inchangées apparaissent à côté avec une espace au début.
printf 'apple\nbanana\ncherry\n' > old.txt   # crée l'échantillon
printf 'apple\ngrape\ncherry\n' > new.txt    # un échantillon qui diffère d'une ligne
diff old.txt new.txt
--- old.txt
+++ new.txt
@@ -1,3 +1,3 @@
 apple
-banana
+grape
 cherry

① Lance printf 'apple\nbanana\ncherry\n' > old.txt pour créer le premier fichier d'échantillon.

② Lance printf 'apple\ngrape\ncherry\n' > new.txt pour créer le second fichier d'échantillon, qui ne diffère que sur la ligne 2.

③ Passe les deux fichiers à diff dans cet ordre et lis quelles lignes reçoivent les marqueurs - (supprimée) et + (ajoutée). (Exécute-le correctement et l'explication apparaîtra.)

Linux console
0 / 3 exécutée(s)
Loading Linux Terminal...

Lire les ajouts et les suppressions

Les différences ne sont pas seulement des réécritures. Quand une ligne est ajoutée uniquement dans le fichier de droite, tu obtiens seulement une ligne + ; quand une ligne est supprimée du fichier de gauche, tu obtiens seulement une ligne -. Au lieu d'avoir - et + en paire comme dans une réécriture, n'avoir que l'un des deux est le signe d'un ajout ou d'une suppression. Inverse l'ordre dans lequel tu compares, et la même différence bascule entre + (ajouté) et - (supprimé).

printf 'one\ntwo\n' > base.txt        # crée l'échantillon
printf 'one\ntwo\nthree\n' > more.txt  # un échantillon avec une ligne ajoutée
diff base.txt more.txt
--- base.txt
+++ more.txt
@@ -1,2 +1,3 @@
 one
 two
+three
Inverser l'ordre échange + et -
diffbase.txt more.txtInverse l'ordre et+ et - s'échangentdiffmore.txt base.txt+ three(ajouté)- three(supprimé)+ apparaît- apparaît
Avec les deux mêmes fichiers, diff base.txt more.txt affiche +three (ajouté), tandis que l'ordre inversé diff more.txt base.txt affiche -three (supprimé).

① Lance printf 'one\ntwo\n' > base.txt pour créer le premier échantillon de deux lignes.

② Lance printf 'one\ntwo\nthree\n' > more.txt pour créer le second échantillon avec une troisième ligne ajoutée.

③ Compare avec diff dans l'ordre base.txtmore.txt et confirme que la ligne ajoutée commence par +.

④ Inverse ensuite l'ordre en more.txtbase.txt et confirme que la même différence apparaît en - (supprimée), et qu'inverser l'ordre échange + et -.

Linux console
0 / 4 exécutée(s)
Loading Linux Terminal...

diff et patch, et l'affichage dans d'autres environnements

Le diff au format unifié que produit diff peut être appliqué tel quel à un autre fichier avec la commande patch. Quand une équipe échange des corrections, se passer ce diff (un patch) est courant. Ce cours se concentre sur la lecture des diffs et ne couvre pas leur application ici.

Dans le terminal navigateur de ce cours, diff produit directement le format unifié. Avec le GNU diff sur Ubuntu et similaires, un diff simple affiche le format traditionnel utilisant 2c2 et < / >, et ajouter diff -u donne le même format unifié que celui utilisé dans ce cours.

QUIZ

Vérification des connaissances

Répondez à chaque question une par une.

Question 1Dans la sortie au format unifié de diff, quel symbole commence une ligne supprimée (qui était dans l'ancien fichier) ?

Question 2Que montre une ligne comme @@ -1,3 +1,3 @@ ?

Question 3Quand une ligne est ajoutée uniquement dans le fichier de droite, à quoi ressemble la sortie de diff ?