Comparer deux textes
Collez l’original et la version modifiée pour voir chaque différence mise en évidence, jusqu’au mot près.
Collez du texte dans les deux champs pour comparer.
Comment ça marche
La comparaison cherche la plus courte suite de lignes ajoutées et supprimées qui transforme un texte en l’autre, avec l’algorithme d’Eugene Myers publié en 1986. C’est la méthode que git utilise par défaut. Les lignes modifiées sont ensuite comparées mot à mot, pour que vous voyiez exactement ce qui diffère.
Les lignes ajoutées ont un fond vert et les lignes supprimées un fond rouge. Une ligne modifiée compte comme une ligne supprimée et une ligne ajoutée, comme dans les autres outils de diff.
Ignorer la casse considère Bonjour et bonjour comme identiques. Ignorer les espaces ne tient pas compte des espaces en début et en fin de ligne ni des espaces multiples, ce qui aide quand l’indentation a changé.
Le diff unifié (unified diff) est le format texte produit par diff -u, avec trois lignes de contexte autour de chaque modification. On peut le coller dans un rapport de bogue ou le faire lire par patch et git apply.
Vos textes ne quittent jamais votre navigateur. Les textes très longs qui diffèrent presque entièrement ne sont pas comparés ligne par ligne ; toutes les lignes sont alors affichées comme modifiées.
Comment l’outil compare
Les lignes identiques au début et à la fin sont d’abord mises de côté. Entre les deux, l’algorithme de Myers trouve la plus courte suite de lignes supprimées et ajoutées. Les fins de ligne CR LF ou CR seul sont d’abord converties en LF, si bien qu’un texte venu de Windows ou d’un Mac compte comme identique. Dans une modification, les lignes supprimées précèdent les lignes ajoutées et leur sont appariées dans l’ordre pour la comparaison mot à mot. Les mots sont coupés aux espaces et à la ponctuation, si bien qu’une virgule modifiée est signalée à elle seule.
Exemple détaillé
Comparez les lignes pomme, banane, cerise avec pomme, banane flambée, cerise, datte, toutes deux avec un retour à la ligne après la dernière ligne. L’algorithme garde pomme et cerise, supprime banane et ajoute banane flambée et datte : deux lignes ajoutées et une supprimée. La ligne banane flambée est appariée avec banane, et seul le mot flambée, avec l’espace qui le précède, est signalé comme nouveau. En diff unifié, cela fait un seul bloc, d’en-tête @@ -1,3 +1,4 @@ : à partir de la ligne 1, trois lignes de l’ancien texte et quatre du nouveau.
Sans retour à la ligne après la dernière ligne, le résultat change. Selon GNU Diffutils, une dernière ligne sans retour à la ligne ne correspond pas à la même ligne avec retour, et cerise n’était la dernière que dans l’ancien texte. L’outil montre alors cerise supprimée puis ajoutée, trois lignes ajoutées et deux supprimées, et écrit \ No newline at end of file après la dernière ligne de chaque texte, comme diff -u. Côte à côte et sur une colonne, la ligne supprimée cerise porte la mention « pas de saut de ligne à la fin », sans quoi elle paraîtrait inchangée. L’option qui ignore les espaces efface cette différence.
Limites
Le travail est plafonné à 4 000 modifications au niveau des lignes. Deux textes de 2 001 lignes entièrement différentes dépassent la limite, et toutes les lignes sont alors montrées supprimées et ajoutées, sans comparaison. Au niveau des mots, le plafond est de 2 000 modifications par paire de lignes, et si plus de 80 % des caractères ont changé, la ligne s’affiche en entier, sans marquage des mots.
Ce qui ne se voit pas
Les blocs déplacés ne sont pas reconnus. Déplacez les deux premières lignes d’un texte de cinq lignes juste avant la dernière, et l’outil montre deux lignes supprimées et deux ajoutées. L’option qui ignore les espaces réduit les espaces à l’intérieur d’une ligne mais ne les supprime pas : a,b et a, b restent différents.