web-dev-qa-db-fra.com

Colorer les espaces blancs dans la sortie de git-diff

En ce qui concerne le formatage du code, je suis un peu puriste :). Je supprime très souvent des espaces blancs inutiles (lignes avec seulement ws, ws à la fin des lignes, etc.). J'ai même configuré vim pour afficher ce type de lignes colorées en rouge.

Mon problème est que, avec git-diff, je vois souvent quelque chose comme ceci:

-      else{ 
+      else{

Même si j'ai git-diff en couleur, je ne peux pas voir la différence (dans cette situation particulière, j'ai supprimé 1 ws en fin de ligne). Y a-t-il un moyen de dire à git-diff de montrer que ws est passé au rouge? (par exemple ceux qui correspondent à/\ s + $/regexp).

140
radarek

Vous devrez peut-être définir le paramètre config color.diff.whitespace, par exemple. avec:

 git config color.diff.whitespace "red reverse"

(Je suppose que vous avez déjà color.diff ou color.ui mis à auto puisque vous dites que vous voyez des correctifs colorés de git diff en tous cas.)

Si vous souhaitez affiner le type d’erreurs d’espace blanc surlignées en rouge, vous pouvez alors modifier core.whitespace, mais blank-at-eol est activé par défaut, vous n'aurez probablement pas besoin de changer cela pour l'exemple que vous avez mentionné.

Une source possible de confusion est celle dans la sortie de git diff, les erreurs d’espace ne sont mises en évidence que dans les lignes introduites, pas dans celles supprimées. ( Mise à jour: comme le souligne Paul Whittaker dans sa réponse , que vous devriez voter à la hausse :), vous pouvez les voir en inversant le sens du diff avec git diff -R.)

Vous pouvez trouver plus de documentation sur ces options de configuration dans le page de manuel de git config

Si vous ne voulez pas utiliser le -R _ _ _ _ _ vous pouvez utiliser l'option WhiteSpace Error Highlight de la page de manuel diff .

--ws-error-highlight =

Mettez en surbrillance les erreurs d'espacement sur les lignes spécifiées par dans la couleur spécifiée par color.diff.whitespace. est une liste de vieux, nouveau, contexte séparés par des virgules. Lorsque cette option n'est pas donnée, seules les erreurs d'espacement dans les nouvelles lignes sont mises en évidence. Par exemple. --ws-error-highlight = new, old met en évidence les erreurs d'espacement sur les lignes supprimées et ajoutées. tout peut être utilisé comme un raccourci pour l'ancien, le nouveau contexte.

git diff --ws-error-highlight=new,old <file>

ou

git diff --ws-error-highlight=all <file>

Je ne sais pas comment allumer et stocker ceci de manière permanente dans la configuration en dehors de l'utilisation d'un alias:

git config alias.df 'diff --ws-error-highlight=all'

Maintenant vous pouvez utiliser:

git df <file>

Pour voir les changements en rouge.

Notez que avec Git 2.11 (Q4 2016) , cet alias pourrait être remplacé par:

git config diff.wsErrorHighlight all

Voir doc on git diff et sur git config .

159
Mark Longair

Utilisation git diff -R pour transformer les lignes supprimées en lignes ajoutées. Ensuite, les espaces de fin seront mis en évidence.

(Cela suppose que vous avez déjà activé la mise en évidence des blancs, conformément aux paramètres de couleur de la réponse de Mark. Le crédit de cette méthode est attribué à la publication de Junio ​​à l’adresse suivante: http://git.661346.n2.nabble.com/Highlighting-whitespace- sur-retrait-avec-git-diff-td5653205.html .)

Par exemple, lors de la conversion d’un fichier de fin de ligne DOS en Unix, git diff -R me montre clairement le ^M caractères (dis) apparaissant à la fin des lignes. Sans pour autant -R _ (et aussi sans -w etc.) indique que le fichier entier a changé, mais ne montre pas comment.

128
Paul Whittaker

Utilisation git diff --color | less -R. Le -R rend les codes de contrôle de la couleur conviviaux.

Ensuite, vous pouvez utiliser la recherche par expression régulière de less, par exemple.

/[[:space:]]+$
9
Kelvin

Ma version de git diff semble déjà le faire - j'ai git 1.7.4.1 et ai mis color.ui = auto.

1
nickgrim