web-dev-qa-db-fra.com

Mon diff contient des espaces de fin - comment s'en débarrasser?

J'ai essayé d'éditer un fichier php dans TextWrangler avec des fins de ligne définies sur Unix, dans NetBeans et dans vim. Lorsque j'enregistre le diff dans un patch et que j'essaie de l'appliquer, cela donne des erreurs d'espaces. Quand je tape git diff Je vois ^M à la fin de mes lignes, mais si je les supprime manuellement dans vim, cela indique que mon fichier de correctif est corrompu, puis le correctif ne s'applique pas du tout.

Je crée un patch avec la commande suivante:

git diff > patchname.patch

Et je l'applique en vérifiant une version propre du fichier à patcher et en tapant

git apply patchname.patch

Comment puis-je créer ce correctif sans erreurs d'espaces? J'ai déjà créé des correctifs et je n'ai jamais rencontré ce problème.

36
beth

Êtes-vous sûr que ce sont des erreurs graves? Par défaut, git avertira des erreurs d'espaces, mais les acceptera quand même. S'il s'agit d'erreurs matérielles, vous devez avoir modifié certains paramètres. Vous pouvez utiliser le --whitespace= drapeau à git apply pour contrôler cela par invocation. Essayer

git apply --whitespace=warn patchname.patch

Cela forcera le comportement par défaut, qui est d'avertir mais d'accepter. Vous pouvez aussi utiliser --whitespace=nowarn pour supprimer complètement les avertissements.

La variable de configuration qui contrôle cela est apply.whitespace.


Pour référence, les erreurs d'espaces ici ne sont pas des erreurs avec votre correctif. C'est une chose de style de code dont git se plaindra par défaut lors de l'application de correctifs. Notamment, il n'aime pas les espaces vides. De même git diff mettra en évidence les erreurs d'espaces (si vous effectuez une sortie vers un terminal et que la couleur est activée). Le comportement par défaut consiste à avertir, mais à accepter le correctif de toute façon, car tous les projets ne sont pas fanatiques des espaces blancs.

26
Lily Ballard

git apply --reject --whitespace=fix mychanges.path

28
zednight

Essayez le patch -p1 <filename.patch

8
flash

la solution à une ligne est:

emacs <filename> -f delete-trailing-whitespace -f save-buffer -f kill-emacs

source: https://wiki.gnome.org/Projects/GnomeShell/Development/WorkingWithPatches

2
askalski

Je pense que la question de savoir comment gérer les espaces blancs a reçu une réponse adéquate, mais vous avez demandé d'où il venait. Vous avez mentionné ^M à la fin des lignes: c'est ainsi que Git affiche les fins de ligne Windows. Essayez peut-être d'exécuter dos2unix sur vos fichiers source avant de créer des correctifs, ou utilisez un éditeur qui conserve les fins de ligne d'origine.

0
TRiG