Comparateur Texte
Comparer deux textes côte à côte
Le diff de texte met en evidence les differences exactes entre deux versions d'un texte, ligne par ligne. Le meme algorithme que git diff et les revues de code.
Qu’est-ce que le diff ?
Un diff (abreviation de « difference ») est un algorithme qui compare deux textes et identifie les changements exacts entre eux. La sortie indique quelles lignes ont ete ajoutees, supprimees ou modifiees, facilitant la comprehension de ce qui a change entre deux versions d’un document.
Le diff est l’un des outils les plus fondamentaux en ingenierie logicielle. Chaque revue de code, chaque git diff, chaque fonctionnalite de « suivi des modifications » dans un editeur de documents repose sur des algorithmes de diff. Le concept a ete invente par Douglas McIlroy aux Bell Labs, et le premier utilitaire Unix diff a ete publie en 1974.
La puissance du diff reside dans sa precision. Au lieu de vous dire vaguement « ces fichiers sont differents », il vous montre exactement quelles lignes ont change, de quelle maniere et dans quel ordre. Cela rend le diff essentiel pour le travail collaboratif ou plusieurs personnes modifient les memes documents.
L’algorithme LCS
La plupart des implementations de diff sont basees sur l’algorithme de la Plus Longue Sous-sequence Commune (LCS). Le LCS trouve la plus longue sequence de lignes qui apparaissent dans les deux textes dans le meme ordre (mais pas necessairement de maniere consecutive). Tout ce qui n’est pas dans le LCS constitue une difference.
L’algorithme classique fonctionne comme suit :
- Construire une matrice ou les lignes representent les lignes du texte A et les colonnes representent les lignes du texte B
- Remplir la matrice par programmation dynamique — chaque cellule enregistre la longueur du LCS jusqu’a ce point
- Remonter dans la matrice pour identifier quelles lignes sont communes (inchangees) et quelles lignes sont propres a chaque texte (ajouts ou suppressions)
Le resultat est un ensemble minimal de modifications qui transforme le texte A en texte B. « Minimal » signifie que l’algorithme trouve le moins d’ajouts et de suppressions possible — il ne signalera pas une suppression suivie d’un ajout quand une seule modification suffirait.
La complexite temporelle est O(n*m) ou n et m sont le nombre de lignes dans chaque texte. Pour les fichiers tres volumineux, des algorithmes optimises comme le diff de Myers (utilise par Git) reduisent cette complexite a O((n+m)*d) ou d est le nombre de differences, ce qui le rend beaucoup plus rapide lorsque les textes sont en grande partie similaires.
Formats de sortie
Les resultats de diff peuvent etre affiches dans plusieurs formats :
Le diff unifie (le plus courant) affiche les modifications avec des lignes de contexte. Les lignes ajoutees sont prefixees par +, les lignes supprimees par -, et les lignes de contexte inchangees n’ont pas de prefixe. C’est le format utilise par git diff :
port=8080
-host=localhost
-debug=false
+host=0.0.0.0
+debug=true
+log_level=info
Le diff cote a cote affiche les deux textes dans des colonnes paralleles avec les modifications mises en evidence. Ce format est utilise par de nombreux outils de diff graphiques et interfaces de revue de code car il est plus facile a parcourir visuellement.
Le diff en ligne met en evidence les differences au niveau des caracteres a l’interieur des lignes modifiees. Au lieu d’afficher l’ancienne et la nouvelle ligne entieres, il indique exactement quels caracteres ont change — utile pour les longues lignes ou seule une petite partie differe.
Cas d’usage courants
- Revue de code : Examiner les pull requests et merge requests en verifiant exactement ce qui a change dans chaque fichier, ligne par ligne
- Audit de configuration : Comparer les fichiers de configuration de production avec ceux de staging ou de reference pour identifier les modifications non autorisees
- Gestion de versions de documents : Suivre les modifications entre les revisions de documents — contrats, specifications, politiques — sans dependre du suivi des modifications de Word
- Verification de migration de base de donnees : Comparer les exports de schema avant et apres la migration pour confirmer que seules les modifications prevues ont ete appliquees
- Debogage de regressions : Comparer les journaux, les reponses d’API ou les sorties de tests entre une version fonctionnelle et une version defaillante pour isoler le changement a l’origine de la regression
Essayez ces exemples
Le diff montre : 'port=8080' inchange, 'host' modifie de localhost a 0.0.0.0, 'debug' modifie de false a true, et 'log_level=info' ajoute. Deux modifications et un ajout.
Version A: 'port=8080\nhost=localhost\ndebug=false' vs Version B: 'port=8080\nhost=0.0.0.0\ndebug=true\nlog_level=info' Lorsque les deux textes sont identiques, le diff ne produit aucune sortie — aucun ajout, aucune suppression, aucune modification. Cela confirme que les deux versions sont exactement les memes.
Both inputs: 'The quick brown fox jumps over the lazy dog.'