web-dev-qa-db-fra.com

Appliquer un fichier diff avec git

J'essayais donc d'appliquer un fichier diff à ma branche git dev. Le diff que je voulais appliquer était celui-ci ici: https://github.com/mbabker/joomla-cms/compare/JHtml_move.patch

J'ai utilisé git apply PATH_TO_PATCH.patch

Maintenant, en essayant de l'appliquer, je reçois une charge d'erreurs cumulant avec un 

fatal: git apply: bad git-diff - expected /dev/null on line 47

La ligne 47 lit --- /dev/null

J'ai vu sur un autre forum que quelqu'un disait qu'il y avait un espace blanc derrière la partie /dev/null mais qu'il n'y en a pas.

Au cas où ce serait utile, on me jetterait également des erreurs de fuite d'espaces blancs sur les lignes 9, 10, 11, 12 et 13 - bien qu'ils ne soient PAS des espaces blancs perdus.

Dans tous les cas, le diff est généré par git - je ne fais que le copier et le coller dans le bloc-notes.

J'ai aussi essayé d'utiliser curl https://github.com/mbabker/joomla-cms/compare/JHtml_move.patch | git am mais cela donne simplement une erreur sans spécifier d'emplacement.

Error message from curl attempt

Des idées quant à la raison pour laquelle cela donne une erreur fatale lorsque la ligne existe réellement ????


Mise à jour vers @IvanZuzak J'ai essayé d’ajouter dans le git am --ignore-space-change --ignore-whitespace PATH_TO_PATCH.patch mais j’ai eu tout d’abord (car il s’agissait du correctif téléchargé) une erreur indiquant que l’e-mail était invalide (il avait été converti en code html ), j’ai donc essayé de résoudre ce problème, mais cela ne cessait de le jeter de temps en temps. Ensuite, il a déclaré previous rebase directory PATH_TO_GITHUB_BRANCH/.git/rebase-apply still exists but mbox given.. J'ai donc trouvé this qui suggère de supprimer le dossier rebase-apply du dossier branches .git. Donc j'ai fait cela et puis j'ai eu l'erreur de courrier électronique invalide à nouveau (bien que j'avais changé les deux du format HTML)

19
George Wilson

J'ai aussi eu le même problème:

fatal: git apply: bad git-diff - expected /dev/null on line 47

Pourtant, la ligne 47 lit --- /dev/null. Le problème que j'ai trouvé était que les fins de ligne étaient au format Windows au lieu du format UNIX. La conversion des fins de ligne au format UNIX dans Notepad ++ a résolu le problème pour moi.

40
Garrett

J'ai eu le même problème. J'ai ouvert Git Bash (Cygwin fonctionne également) et j'ai:

dos2unix.exe <patch-file>

Ensuite, j'ai pu appliquer le patch parfaitement.

4
bigosmallm

Vous devrez vérifier si vous voyez toujours le message d'erreur bad git-diff - expected /dev/null on line 47 après Git 2.17 (T2 2018).

De nombreux endroits dans "git apply" savaient que "/dev/null" signalant "qu'il n'y a pas de fichier de ce côté de la diff" peut être suivi par des espaces et des ordures lors de l'analyse d'un correctif, à l'exception de l'un d'entre eux qui a créé un correctif valide (par exemple ceux de Subversion) rejetés.

Voir commit e454ad4 (15 février 2018) de Tatyana Krasnukha (tkrasnukha) .
Voir commit f16ef7b (15 février 2018) de Johannes Schindelin (dscho) .
(Fusion par Junio ​​C Hamano - gitster - dans commit 177bd65 , 28 février 2018)

Voir aussi git-for-windows/git numéro 1489

apply: manipuler les différences Subversion avec /dev/null gracieusement

Subversion génère des diffs pouvant contenir des lignes comme celle-ci:

---/dev/null (inexistant)

Apprenons à Git à utiliser des machines pour gérer une telle ligne avec élégance.

1
VonC

J'avais le même problème, mais je testais un correctif que j'allais envoyer à un serveur de liste, en suivant les recommandations suivantes: https://www.kernel.org/doc/Documentation/email-clients.txt . Je ne pouvais pas simplement régler le problème sur mon fichier local, je devais distribuer un correctif qui allait potentiellement être endommagé par Gmail et je vérifiais la version gmailée avec git apply.

Mon collègue m'a fait remarquer que 

git am 

Mieux que git apply pour corriger ce type de problèmes, c’est ce qu’il faut utiliser avec les fichiers .patch. Ceci est mentionné dans l'un des commentaires ci-dessus, mais cela devrait être une réponse.

1
Aaron Skomra

J'ai eu le même problème Vous avez un rebase en cours, écrivez

git rebase --skip 

plusieurs fois, jusqu’à voir No rebase in progress? puis réessayez avec git am

0
mariovials

Vous pouvez avoir du texte supplémentaire dans cette ligne, j'avais --- /dev/null (nonexistent)

Supprimer tous les symboles de 'null' jusqu'à la fin de la ligne m'a aidé (après avoir appliqué les suggestions d'autres réponses).

0
KernelPanic

J'ai eu le même problème.

fatal: git apply: bad git-diff - expected /dev/null on line 96

Ou, si je convertis toutes les fins de ligne au format Unix:

error: patch failed: <file>:81
error: <file>: patch does not apply
...

git apply --ignore-whitespace <patch>.patch a travaillé avec les fins de ligne Unix.

0
sigod