J'ai un certain correctif appelé my_pcc_branch.patch.
Lorsque j'essaie de l'appliquer, je reçois le message suivant:
$ git apply --check my_pcc_branch.patch
warning: src/main/java/.../AbstractedPanel.java has type 100644, expected 100755
error: patch failed: src/main/java/.../AbstractedPanel.java:13
error: src/main/java/.../AbstractedPanel.java: patch does not apply
Qu'est-ce que ça veut dire?
Comment puis-je résoudre ce problème?
has type 100644, expected 100755
signifie pas qu'il y a une incompatibilité des autorisations chmod quelque part?Réponses:
git apply --reject --whitespace=fix mychanges.patch
travaillé pour moi.Explication
L'
--reject
option demandera à git de ne pas échouer s'il ne peut pas déterminer comment appliquer un correctif, mais plutôt d'appliquer des morceaux individuels qu'il peut appliquer et de créer des fichiers de rejet (.rej
) pour les morceaux qu'il ne peut pas appliquer. Wiggle peut "appliquer [ces] correctifs rejetés et effectuer des différences au niveau des mots".De plus, vous
--whitespace=fix
avertira des erreurs d'espace et essaiera de les corriger, plutôt que de refuser d'appliquer un morceau par ailleurs applicable.Ensemble, les deux options rendent l'application d'un correctif plus robuste contre les pannes, mais elles nécessitent une attention supplémentaire en ce qui concerne le résultat.
Pour toute la documentation, voir https://git-scm.com/docs/git-apply .
la source
.rej
fichiers quand ne peut pas détecter automatiquement comment appliquer un patch. Vous pouvez utiliser wiggle pour résoudre ces problèmes.Johannes Sixt de la liste de diffusion [email protected] a suggéré d'utiliser les arguments de ligne de commande suivants:
Cela a résolu mon problème.
la source
-C1
basculer pour appliquer, cela réduit le contexte des ajouts qui sont considérés comme importants.Lorsque tout le reste échoue, essayez
git apply
l'--3way
option .git apply --3way patchFile.patch
Le cas d'échec typique applique autant de correctifs que possible et vous laisse avec des conflits à résoudre dans git comme vous le faites normalement. Probablement une étape plus facile que l'
reject
alternative.la source
--3way
devrait être le comportement par défaut. Lorsque le patch échoue, dites-moi au moins ce qui a échoué afin que je puisse le réparer manuellement.git apply
échoue et ne signale pas pourquoi quelque chose échoue. Je n'ai même pas pu trouver de*.rej
fichiers comme ceuxhg
générés.Cette commande appliquera le correctif sans le résoudre en laissant des fichiers incorrects comme
*.rej
:Il vous suffit de les résoudre. Une fois résolu, exécutez:
la source
*.rej
- tout ce que je peux trouver est de faire les modifications manuellement dans le fichier source et de supprimer ces.rej
fichiers. De toute autre manière?wiggle --replace path/to/file path/to/file.rej
. Cette commande appliquera les modifications du.rej
fichier au fichier d'origine. Il crée également une copie du fichier d'origine, commepath/to/file.porig
. S'il vous plaît, consultez la documentation pour obtenir plus d'informations sur wiggleEssayez d'utiliser la solution suggérée ici: https://www.drupal.org/node/1129120
patch -p1 < example.patch
Cela m'a aidé.
la source
git: 'patch' is not a git command.
legit version 2.21.1 (Apple Git-122.3)
Cela se produit lorsque vous mélangez des clients git UNIX et Windows parce que Windows n'a pas vraiment le concept du bit "x", donc votre extraction d'un
rw-r--r--
fichier (0644) sous Windows est "promue" par la couche POSIX msys pour êtrerwx-r-xr-x
(0755) . git considère que la différence de mode est fondamentalement la même qu'une différence textuelle dans le fichier, donc votre patch ne s'applique pas directement. Je pense que votre seule bonne option est de mettre icicore.filemode
àfalse
( en utilisantgit-config
).Voici un problème msysgit avec des informations connexes: http://code.google.com/p/msysgit/issues/detail?id=164 (redirigé vers la copie du 3 décembre 2013 d'Archive.org)
la source
git reset --hard HEAD
de forcer git à récupérer vos fichiers avec la nouvelle option en vigueur.Dans mon cas, j'ai été assez stupide pour créer le fichier correctif de manière incorrecte en premier lieu, ce qui diffère en fait de la mauvaise façon . Je me suis retrouvé avec exactement les mêmes messages d'erreur.
Si vous êtes maître et que vous le faites
git diff branch-name > branch-name.patch
, cela essaie de supprimer tous les ajouts que vous souhaitez effectuer et vice versa (ce qui était impossible pour git car, évidemment, les ajouts jamais effectués ne peuvent pas être supprimés).Assurez-vous donc de passer à la caisse de votre succursale et d'exécuter
git diff master > branch-name.patch
la source
AVERTISSEMENT: cette commande peut supprimer les anciennes validations perdues de façon PERMANENTE. Faites une copie de l'intégralité de votre référentiel avant d'essayer.
J'ai trouvé ce lien
Je ne sais pas pourquoi cela fonctionne mais j'ai essayé de nombreux contournements et c'est le seul qui a fonctionné pour moi. En bref, exécutez les trois commandes ci-dessous:
la source
Ce que je cherchais n'est pas exactement indiqué ici dans SO, j'écris pour le bénéfice d'autres qui pourraient rechercher des similaires. J'ai rencontré un problème avec un fichier (présent dans l'ancien référentiel) supprimé dans le référentiel. Et lorsque j'applique le correctif, il échoue car il n'a pas pu trouver le fichier à appliquer. (donc mon cas est que le patch git échoue car le fichier a été supprimé) '#git apply --reject' a définitivement donné une vue mais ne m'a pas tout à fait apporté au correctif. Je ne pouvais pas utiliser wiggle car il n'est pas disponible pour nous dans nos serveurs de build. Dans mon cas, j'ai surmonté ce problème en supprimant l'entrée du `` fichier qui a été supprimé dans le référentiel '' du fichier de correctif que j'ai essayé d'appliquer, j'ai donc appliqué toutes les autres modifications sans problème (en utilisant la fusion à 3 voies, en évitant erreurs d'espace blanc), puis fusionner manuellement le contenu du fichier supprimé à l'endroit où il a été déplacé.
la source
Mon problème est que j'ai couru
git diff
, puis courugit reset --hard HEAD
, puis réalisé que je voulais annuler, j'ai donc essayé de copier la sortie degit diff
dans un fichier et de l'utilisergit apply
, mais j'ai eu une erreur que "le patch ne s'applique pas". Après le passage àpatch
et essayer de l' utiliser, je me suis aperçu qu'un morceau du différentiel a été répété pour une raison quelconque, et après avoir enlevé le double ,patch
(et sans doute aussigit apply
) travaillé.la source