web-dev-qa-db-fra.com

git: le correctif ne s'applique pas

J'ai un certain patch 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?

203
DP_

Johannes Sixt de la liste de diffusion [email protected] a suggéré d'utiliser les arguments de ligne de commande suivants:

git apply --ignore-space-change --ignore-whitespace mychanges.patch

Cela a résolu mon problème.

267
DP_

git apply --reject --whitespace=fix mychanges.patch a travaillé pour moi.

208
user1028904

Cette commande appliquera le correctif sans le résoudre en laissant les mauvais fichiers en tant que *.rej:

git apply --reject --whitespace=fix mypath.patch

Vous devez juste les résoudre. Une fois résolu, lancez:

git -am resolved
43
Ivan Voroshilin

Lorsque tout le reste échoue, essayez git apply 'OPTION --3way .

git apply --3way patchFile.patch

- 3 voies
Lorsque le patch ne s'applique pas proprement, retombez sur la fusion à 3 voies si le patch enregistre l’identité des blobs auxquels il est censé s’appliquer, et nous avoir ces blobs disponibles localement, en laissant éventuellement le conflit marqueurs dans les fichiers de l’arbre de travail que l’utilisateur doit résoudre. Ce option implique l'option --index et est incompatible avec le --reject et les options --cached.

Le cas typique d'échec s'applique autant que possible au correctif et vous laisse avec des conflits à résoudre dans git comme vous le faites normalement. Probablement une étape plus facile que l'option reject.

32
ruffin

Cela se produit lorsque vous mélangez des clients git UNIX et Windows car Windows n’ayant pas vraiment le concept du bit "x", votre extraction d’un fichier rw-r--r-- (0644) sous Windows est "promue" par la couche POSIX msys comme étant rwx-r-xr-x ( 0755). git considère que cette différence de mode est fondamentalement la même chose qu'une différence textuelle dans le fichier, votre patch ne s'applique donc pas directement. Je pense que votre seule bonne option ici est de définir core.filemode sur false (en utilisant git-config).

Voici un problème de msysgit avec certaines informations connexes: http://code.google.com/p/msysgit/issues/detail?id=164 (redirigé vers la copie du 3 décembre 2013 d’archive.org)

12
Ben Jackson

Essayez d’utiliser la solution suggérée ici: https://www.drupal.org/node/1129120

patch -p1 < example.patch

Cela m'a aidé.

6
Pini Cheyni

Dans mon cas, j'ai été assez stupide pour créer le fichier de correctif de façon incorrecte, en fait en différant le sens . Je me suis retrouvé avec exactement les mêmes messages d'erreur.

Si vous êtes maître et faites git diff branch-name > branch-name.patch, ceci essaiera de supprimer tous les ajouts que vous voulez faire et vice-versa (ce qui était impossible pour git car, bien évidemment, les ajouts jamais effectués ne peuvent pas être supprimés).

Donc, assurez-vous de commander votre succursale et d’exécuter git diff master > branch-name.patch

1
Ophidian

J'ai trouvé ce lien

Je ne sais pas du tout pourquoi cela fonctionne, mais j’ai essayé de nombreuses solutions et c’est le seul qui a fonctionné pour moi. En bref, exécutez les trois commandes ci-dessous:

git fsck --full
git reflog expire --expire=now --all
git gc --Prune=now
0
Archmede