Que signifie «1 ligne ajoute des erreurs d'espaces» lors de l'application d'un correctif?

106

J'édite quelques fichiers de démarque d'un référentiel distant cloné et je voulais tester la création et l'application de correctifs d'une branche à une autre. Cependant, chaque fois que j'apporte une modification, je reçois le message suivant pendant git apply:

0001-b.patch:16: trailing whitespace.
warning: 1 line adds whitespace errors.

(Cela se produit sur mon Mac et je ne sais pas où le code d'origine a été créé.)

Que signifie le message d'avertissement et dois-je m'en soucier?

Yarin
la source
1
Connexes ("pourquoi?"): Stackoverflow.com/questions/1583406/…
mécanique

Réponses:

127

Vous n'avez pas besoin de vous en soucier.

L'avertissement édicte une norme de propreté des fichiers texte en ce qui concerne les espaces, le genre de chose dont de nombreux programmeurs ont tendance à se soucier. Comme l' explique le manuel :

Ce qui est considéré comme des erreurs d'espace blanc est contrôlé par la configuration core.whitespace. Par défaut, les espaces de fin (y compris les lignes constituées uniquement d'espaces blancs) et un caractère d'espace immédiatement suivi d'un caractère de tabulation à l'intérieur du retrait initial de la ligne sont considérés comme des erreurs d'espace.

Par défaut, la commande génère des messages d'avertissement mais applique le correctif.

Ainsi, l '«erreur» signifie que la modification introduit un espace blanc de fin, une ligne d'espaces uniquement ou un espace qui précède une tabulation. À part cela, il n'y a rien d'erroné à propos du changement et il s'appliquera proprement et correctement. En d'autres termes, si vous ne vous souciez pas des espaces "incorrects", n'hésitez pas à ignorer l'avertissement ou à le désactiver avec git config apply.whitespace nowarn.

user4815162342
la source
12
Regardez le commit avec git show- si votre git fait des couleurs, vous verrez l'espace blanc offensant apparaître en rouge furieux. En outre, git show --word-diffvous montrera non seulement le changement de ligne, mais les insertions au milieu de la ligne, ce qui devrait montrer si le patch ajoute vraiment seulement un mot au milieu, ou s'il ajoute également un espace blanc à la fin.
user4815162342
12
Vous n'avez pas besoin de vous en soucier. Mais tu devrais. Les espaces blancs de fin doivent être supprimés.
funroll
1
Sauf que l'OP n'ajoute aucun nouvel espace blanc de fin, ne modifie que ce qui existe déjà.
user4815162342
4
J'ai vu cet accessoire dans une situation similaire lorsque les fins de ligne sont des CRLF de style Windows au lieu de celles Unix.
Ezequiel Muns
1
@Yarin Si vous ajoutez un mot au milieu d'une ligne et que la ligne contient déjà des espaces à la fin, cela peut déclencher l'avertissement.
Warren Dew
4

Un cas où vous pouvez légitimement vous en soucier est celui où vous voulez faire la différence entre les «anciennes» erreurs de blancs (que vous voudrez peut-être conserver pour des raisons héritées) et les «nouvelles» erreurs d'espaces (que vous voulez éviter).

À cet effet, Git 2.5+ (Q2 2015) proposera une option plus spécifique pour la détection des espaces.

Voir commits 0e383e1 , 0ad782f et d55ef3e [26 mai 2015] par Junio ​​C Hamano ( gitster) .
(Fusionné par Junio dans commit 709cd91 , 11 juin 2015)

diff.c: --ws-error-highlight=<kind>option

Traditionnellement, nous nous intéressions uniquement aux ruptures d'espaces blancs introduites dans les nouvelles lignes.
Certaines personnes veulent également peindre des cassures d'espaces blancs sur de vieilles lignes. Lorsqu'ils voient une rupture d'espace blanc sur une nouvelle ligne, ils peuvent repérer le même type de rupture d'espace blanc sur l'ancienne ligne correspondante et veulent dire "Ah, ces cassures sont là mais elles ont été héritées de l'original, alors ne les touchons pas pour maintenant."

Introduire l' --ws-error-highlight=<kind>option, qui leur permet de transmettre une liste séparée par des virgules de old, newet contextde spécifier les lignes pour mettre en évidence des erreurs sur les espaces.

La documentation comprend désormais :

--ws-error-highlight=<kind>

Mettez en surbrillance les erreurs d'espaces sur les lignes spécifiées par <kind>dans la couleur spécifiée par color.diff.whitespace.
<kind>est une liste séparée d' une virgule old, new, context.
Lorsque cette option n'est pas donnée, seules les erreurs d'espacement dans les newlignes sont mises en surbrillance.

Par exemple, --ws-error-highlight=new,oldmet en évidence les erreurs d'espaces sur les lignes supprimées et ajoutées.
allpeut être utilisé comme raccourci pour old,new,context.

Par exemple, l'ancien commit avait une erreur d'espace blanc ( bbb), mais vous pouvez vous concentrer uniquement sur les nouvelles erreurs (à la fin de still bbbet ccc):

erreurs de shitespace anciennes et nouvelles

(test fait après t/t4015-diff-whitespace.sh)


Avec Git 2.26 (Q1 2020), la diff-*famille de sous-commandes de plomberie prête maintenant attention à la diff.wsErrorHighlightconfiguration, qui a été ignorée auparavant; cela permet à " git add -p" d'afficher également les problèmes d'espaces blancs à l'utilisateur final.

Voir commit da80635 (31 janvier 2020) par Jeff King ( peff) .
(Fusionné par Junio ​​C Hamano - gitster- in commit df04a31 , 14 fév 2020)

diff: déplacez diff.wsErrorHighlight vers la configuration "de base"

Signé par: Jeff King

Nous analysons diff.wsErrorHighlight in git_diff_ui_config(), ce qui signifie qu'il ne prend pas effet pour les commandes de plomberie, uniquement pour les porcelaines comme git diffelle.
C'est légèrement ennuyeux car cela signifie que des scripts comme add--interactive, qui produisent un diff visible par l'utilisateur avec une couleur, ne respectent pas l'option .

Nous pourrions apprendre à ce script à analyser la configuration et à la transmettre --ws-error-highlightà la plomberie diff. Mais il existe une solution plus simple.

Il devrait être raisonnablement sûr pour la plomberie de respecter cette option, car elle ne se déclenche que lorsque la couleur est activée par ailleurs. Et quiconque analyse la sortie colorisée doit déjà faire face au fait que cela color.diff.*peut changer la sortie exacte qu'il voit; ces options font partie git_diff_basic_config()depuis sa création dans 9a1805a872 (ajoutez un rappel de configuration diff "basique", 04/01/2008, Git v1.5.4-rc3).

Nous pouvons donc simplement le déplacer vers la configuration "de base", qui corrige add--interactive, avec tout autre script dans le même bateau, avec un très faible risque de blesser les utilisateurs de plomberie.

VonC
la source
-2

Parce que la ligne commençant par TABistead of SPACE. Allez sur le fichier de correctif et remplacez-le TABpar SPACE. Par exemple, sur vim en ligne + du type de fichier patch x pour supprimer l'espace et ne pas supprimer le signe + et insérer un espace (CTRL) sur eqiv à la taille d'origine.

Marian
la source
1
-1 Vous pensez vraiment que git se plaindrait de l'indentation des tabulations de style Linus? La seule utilisation légitime de l'onglet, le cas échéant, est précisément le début de la ligne.
user2394284