Mon diff contient des espaces - comment s'en débarrasser?
J'ai essayé de l'édition d'un fichier php dans TextWrangler avec des fins de ligne jeu sous Unix, dans NetBeans, et dans vim. Quand j'ai enregistrer le diff à un patch, puis essayer de les appliquer, il donne les espaces erreurs. Quand je tape git diff
je peux voir ^M
à la fin de mes lignes, mais si je supprimer manuellement ces dans vim, il me dit que mon patch fichier est corrompu, et puis le patch ne s'applique pas à tous.
J'ai créer un patch avec la commande suivante:
git diff > patchname.patch
Et je l'applique par la vérification d'une version propre du fichier à patcher et en tapant
git apply patchname.patch
Comment puis-je créer ce patch sans les espaces erreurs? J'ai créé des correctifs avant et de ne jamais rencontrer ce genre de problème.
- Vous pourriez vouloir donner plus de détails au sujet de votre processus de création d'un patch.
- J'ai ajouté des détails. Vous ne savez pas comment utile qui va être, mais il ne peut pas nuire.
- Je suis confronté au même problème et l'ont fait de la recherche. Il ressemble à git ajoute ces espaces automatiquement à
git diff
etfit show
, de sorte que toute la pièce a fait avec un tel code de fuite d'espaces. Si vous avez noyau linux dépôt git local (linus arborescence du noyau), vous pouvez exécutergit show 402bae597e
. Il va vous montrer une fuite d'espace avant statique DEVICE_ATTR_RO(drapeaux); et la fermeture des accolades dans la ligne précédente, même si elles ne sont pas présentes dans le code. - Ce problème peut être reproduit par l'ajout d'une ligne de départ ou de début d'une méthode (où vous avez quelque chose d'écrit dans le début d'une ligne par exemple l'ouverture/la fermeture de corset ou de prototype de fonction). Ensuite, exécutez
git diff
. Vous pouvez voir les espaces avant les fichiers inchangés. Ces ensuite être présenté à la pièce quandgit format-patch
est utilisé
Vous devez vous connecter pour publier un commentaire.
Êtes-vous sûr que ce sont des erreurs matérielles? Par défaut, git va avertir les espaces erreurs, mais accepte quand même. Si elles sont difficiles erreurs, alors vous devez avoir modifié certains paramètres. Vous pouvez utiliser le
--whitespace=
drapeau àgit apply
pour contrôler cela par l'invocation de base. EssayezQui va forcer le comportement par défaut, qui est de mettre en garde, mais accepter. Vous pouvez également utiliser
--whitespace=nowarn
pour enlever les avertissements entièrement.La variable config qui contrôle ce qui est
apply.whitespace
.Pour référence, les espaces erreurs ici ne sont pas des erreurs avec votre patch. C'est un code de style de chose que git, par défaut, pour se plaindre lorsque l'application des correctifs. Notamment, il n'aime pas de fuite d'espaces. De même
git diff
mettra en évidence les espaces erreurs (si vous êtes de la sortie d'un terminal et la couleur est sur). Le comportement par défaut est d'avertir, mais accepter le patch de toute façon, parce que chaque projet est un fanatique de l'espace blanc.git apply --whitespace=fix patchname.patch
, qui fixera les espaces les erreurs qu'il voit pour vous.git apply --whitespace=fix patchname.patch
et git va corriger les espaces pour vous.git apply --reject --whitespace=fix mychanges.path
Essayer de patch-p1 < nom de fichier.patch
>
( pas<
) est correct.<
) est corriger, de cette façon, les fichiers de destination sont déterminés par le fichier de correctif lui-même. Voirman patch
: patch [options] [originalfile [patchfile]] généralement patch -pnum <patchfilela solution est:
source:
https://wiki.gnome.org/Projects/GnomeShell/Development/WorkingWithPatches
Je pense que la question de la façon de composer avec l'espace a été répondu de manière adéquate, mais vous demandé d'où il venait. Vous avez mentionné
^M
à la fin d'une ligne: c'est comment Git montre Windows fins de ligne. Peut-être essayez d'exécuterdos2unix
sur vos fichiers source avant de créer des correctifs, ou d'utiliser un éditeur qui maintient l'origine des fins de ligne.