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.
Ê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.
git apply --reject --whitespace=fix mychanges.path
Essayez le patch -p1 <filename.patch
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
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.