142 votes

Utiliser 'diff' (ou n'importe quoi d'autre) pour obtenir une différence de niveau de caractère entre des fichiers texte

J'aimerais utiliser 'diff' pour obtenir à la fois la différence de lignes et la différence de caractères. Par exemple, considérons :

Dossier 1

abcde
abc
abcccd

Dossier 2

abcde
ab
abccc

Utilisation diff -u Je reçois :

@@ -1,3 +1,3 @@
 abcde
-abc
-abcccd
\ No newline at end of file
+ab
+abccc
\ No newline at end of file

Cependant, il ne m'indique que les modifications apportées à ces lignes. Ce que j'aimerais voir, c'est quelque chose comme :

@@ -1,3 +1,3 @@
 abcde
-abc
-abcccd
\ No newline at end of file
+ab
+abccc
\ No newline at end of file

Vous voyez ce que je veux dire.

Maintenant, je sais que je peux utiliser autres moteurs pour marquer/contrôler la différence sur une ligne spécifique. Mais je préfère utiliser un outil qui fait tout cela.

119voto

senf78 Points 11

Git dispose d'un différentiel de mots, et le fait de définir tous les caractères comme des mots permet d'obtenir un différentiel de caractères. Cependant, les changements de ligne sont ignoré .

Exemple

Créez un référentiel comme suit :

mkdir chardifftest
cd chardifftest
git init
echo -e 'foobarbaz\ncatdog\nfox' > file
git add -A; git commit -m 1
echo -e 'fuobArbas\ncat\ndogfox' > file
git add -A; git commit -m 2

Maintenant, faites git diff --word-diff=color --word-diff-regex=. master^ master et vous obtiendrez :

git diff

Notez que les ajouts et les suppressions sont reconnus au niveau du caractère, alors que les ajouts et les suppressions de nouvelles lignes sont ignorés.

Vous pouvez également essayer l'un de ces produits :

git diff --word-diff=plain --word-diff-regex=. master^ master
git diff --word-diff=porcelain --word-diff-regex=. master^ master

51voto

zhanxw Points 426

Vous pouvez utiliser :

diff -u f1 f2 |colordiff |diff-highlight

screenshot

colordiff est un paquet Ubuntu. Vous pouvez l'installer en utilisant sudo apt-get install colordiff .

diff-highlight provient de git (depuis la version 2.9). Il est situé dans /usr/share/doc/git/contrib/diff-highlight/diff-highlight . Vous pouvez le placer quelque part dans votre $PATH .

26voto

Ned Points 839

Python difflib est un as si vous voulez le faire par programme. Pour une utilisation interactive, j'utilise de vim mode diff (assez facile à utiliser : il suffit d'invoquer vim avec vimdiff a b ). J'utilise aussi occasionnellement Au-delà de la comparaison qui fait à peu près tout ce que l'on peut espérer d'un outil de diff.

Je n'ai pas vu d'outil en ligne de commande qui fasse cela utilement, mais comme le note Will, le code d'exemple difflib pourrait aider.

20voto

Vous pouvez utiliser le cmp sous Solaris :

cmp

Compare deux fichiers et, s'ils diffèrent, indique le premier octet et le numéro de ligne où ils diffèrent.

11voto

VitalyB Points 2318

Je n'ai pas vérifié la bibliothèque python mais j'ai fini par trouver Google's La solution est suffisamment bonne pour ce dont j'avais besoin. Et elle est implémentée dans de nombreux langages (dont le C#). J'ai été impressionné.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X