Comment comparer des fichiers texte : outils et techniques Diff
Comparer du texte est une tùche quotidienne pour les développeurs. Que ce soit pour examiner des modifications de code, déboguer une dérive de configuration ou fusionner des documents, comprendre la sortie diff est essentiel. Ce guide couvre les algorithmes, outils et techniques pour une comparaison de texte efficace.
Comprendre la sortie Diff
Le format diff unifié classique montre les changements entre deux fichiers :
--- original.txt
+++ modified.txt
@@ -1,5 +1,6 @@
Line 1: unchanged
-Line 2: removed text
+Line 2: modified text
+Line 2.5: added line
Line 3: unchanged
Line 4: unchanged
-Line 5: also removed
- Les lignes commençant par
-ont été supprimées (de l'original) - Les lignes commençant par
+ont été ajoutées (dans la version modifiée) - Les lignes commençant par
(espace) sont du contexte inchangé - Les marqueurs
@@indiquent les numéros de ligne concernés
Algorithmes Diff
Algorithme de Myers
L'algorithme par dĂ©faut utilisĂ© par Git et la plupart des outils diff. Il trouve le script d'Ă©dition le plus court â le nombre minimum d'insertions et de suppressions pour transformer un fichier en un autre. Il produit des diffs propres et lisibles pour la plupart des contenus.
Patience Diff
Meilleur pour le texte structuré comme le code source. Au lieu de trouver l'édition la plus courte, il fait d'abord correspondre les lignes uniques présentes dans les deux fichiers, puis calcule le diff des sections intermédiaires. Cela produit souvent des diffs plus significatifs qui s'alignent avec les blocs logiques du code.
git diff --patience
Histogram Diff
Une amélioration du patience diff, utilisé comme algorithme par défaut de Git depuis la version 2.x. Il gÚre mieux les lignes répétées et produit une sortie plus propre pour les fichiers avec des changements structurels importants.
Comparer du texte en ligne
Pour des comparaisons rapides sans installer d'outils, notre Comparateur de texte Diff offre des vues cĂŽte Ă cĂŽte et en ligne directement dans votre navigateur. Collez deux textes et voyez les changements mis en surbrillance instantanĂ©ment â tout le traitement se fait localement.
Outils Diff en ligne de commande
diff (POSIX)
L'outil Unix classique :
# Unified format (most readable)
diff -u file1.txt file2.txt
# Side-by-side
diff -y file1.txt file2.txt
# Ignore whitespace
diff -w file1.txt file2.txt
# Recursive directory comparison
diff -r dir1/ dir2/
git diff
MĂȘme en dehors d'un dĂ©pĂŽt Git, git diff fournit une sortie supĂ©rieure :
# Compare two files
git diff --no-index file1.txt file2.txt
# Word-level diff (highlights changed words, not whole lines)
git diff --word-diff
# Stat summary (files changed, insertions, deletions)
git diff --stat
colordiff / delta
Pour une sortie colorée dans le terminal :
# colordiff: drop-in replacement for diff
colordiff file1.txt file2.txt
# delta: modern diff viewer for Git
git diff | delta
Diff pour la revue de code
Une revue de code efficace dépend de diffs lisibles. Voici des techniques pour améliorer la qualité des diffs :
1. Gardez les commits ciblés
Les diffs volumineux de centaines de lignes sont difficiles Ă examiner. Chaque commit devrait traiter un seul sujet :
- Séparez les changements de formatage des changements de logique
- Découpez les refactorisations importantes en étapes incrémentales
- Déplacez les fichiers dans un commit, modifiez-les dans un autre
2. Utilisez le diff au niveau des mots
Les diffs au niveau des lignes masquent le changement réel quand une ligne a une petite modification enfouie dans une longue chaßne :
# Shows only the changed words, not entire lines
git diff --word-diff
3. Ignorez les espaces dans les revues
Les changements de formatage ajoutent du bruit aux diffs significatifs :
git diff -w # Ignore all whitespace changes
git diff -b # Ignore whitespace amount changes
4. Examinez avec du contexte
Plus de lignes de contexte aident Ă comprendre le code environnant :
git diff -U10 # Show 10 lines of context (default is 3)
Gestion des conflits de fusion
Lorsque Git rencontre des changements conflictuels, il marque le conflit dans le fichier :
<<<<<<< HEAD
const timeout = 5000;
=======
const timeout = 10000;
>>>>>>> feature-branch
Pour résoudre :
- Comprendre les deux changements â pourquoi chacun a-t-il Ă©tĂ© fait ?
- Décider quelle version garder, ou les combiner
- Supprimer les marqueurs de conflit
- Tester le résultat
Pour les fusions complexes, utilisez un outil de fusion Ă trois voies qui affiche l'ancĂȘtre commun aux cĂŽtĂ©s des deux versions.
Comparer du contenu non textuel
Diff JSON
Le diff textuel standard a du mal avec le JSON car les changements d'ordre des clés et de formatage créent du bruit. Le diff sémantique JSON compare la structure de données réelle. Consultez notre outil JSON Diff pour une comparaison structurelle.
Diff CSV
Les données tabulaires nécessitent une comparaison tenant compte des colonnes. Le diff standard traite chaque ligne comme une chaßne, manquant les changements au niveau des cellules.
Fichiers binaires
Le diff ne peut pas comparer de maniÚre significative les fichiers binaires. Pour les images, utilisez des outils de diff visuel. Pour les documents, convertissez d'abord en texte ou utilisez des outils de comparaison spécifiques au format.
Diff dans l'automatisation
Pipelines CI/CD
Utilisez diff pour vérifier la sortie attendue dans les tests :
command_under_test > actual_output.txt
diff expected_output.txt actual_output.txt
# Exit code 0 = identical, 1 = different
Détection de dérive de configuration
Comparez la configuration de production avec l'état attendu :
diff deployed_config.yaml expected_config.yaml
Suivi des changements de documentation
Suivez les changements de documentation pour la revue :
git diff --stat HEAD~5..HEAD -- docs/
FAQ
Que signifie « hunk » dans la sortie diff ?
Un hunk est un bloc contigu de changements dans un diff. Chaque ligne @@ commence un nouveau hunk. Git regroupe les changements proches en un seul hunk â si deux changements sont Ă moins de 3 lignes l'un de l'autre (le contexte par dĂ©faut), ils apparaissent dans le mĂȘme hunk. Les hunks peuvent ĂȘtre indexĂ©s indĂ©pendamment avec git add -p.
Comment comparer deux branches dans Git ?
Utilisez git diff branch1..branch2 pour voir toutes les différences entre deux branches. Ajoutez --stat pour un résumé, ou -- path/to/file pour comparer un fichier spécifique. Pour comparer ce qu'une branche a ajouté depuis sa divergence, utilisez trois points : git diff branch1...branch2.
Ressources associées
- Comparateur de texte Diff â Comparez du texte cĂŽte Ă cĂŽte dans votre navigateur
- Guide de dĂ©bogage JSON Diff â Comparaison structurelle pour les donnĂ©es JSON
- Aide-mĂ©moire Regex â Correspondance de patterns pour trouver des changements spĂ©cifiques