474 votes

git : le patch ne s'applique pas

J'ai un certain patch appelé my_pcc_branch.patch.

Lorsque j'essaie de l'appliquer, j'obtiens 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 cela signifie ?

Comment puis-je résoudre ce problème ?

0 votes

Y a-t-il des fichiers AbstractedPanel.java.rej qui traînent ? Typiquement, cela signifie qu'une ligne bot a changé dans la source ainsi que dans le patch (ici la ligne 13 semble être affectée).

0 votes

Non, je n'ai pas trouvé de fichiers *.rej.

0 votes

Je ne sais pas pourquoi la réponse acceptée devrait résoudre le problème (je soupçonne donc que c'est un faux problème), mais ne le fait pas. has type 100644, expected 100755 suppose qu'il y a une erreur de permissions chmod quelque part ?

18voto

Ben Jackson Points 28358

Cela se produit lorsque vous mélangez des clients git UNIX et Windows, car Windows n'a pas vraiment le concept du bit "x", ce qui fait que l'extraction d'un fichier de type rw-r--r-- (0644) sous Windows est "promu" par la couche POSIX de msys pour être rwx-r-xr-x (0755). git considère que cette 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 ici est de définir core.filemode a false (en utilisant git-config ).

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

2 votes

J'ai essayé d'exécuter la commande "git config core.filemode false", mais cela n'a pas aidé - je reçois toujours le même message.

1 votes

En supposant que vous n'avez pas de changements non-committés dans votre arbre, essayez git reset --hard HEAD pour forcer git à vérifier à nouveau vos fichiers avec la nouvelle option en vigueur.

0 votes

Je viens de l'essayer en exécutant "git reset --hard HEAD". Cela a réussi (j'ai vu le message "HEAD is now at ..."), mais le problème avec "git apply" persiste.

9voto

secfree Points 1532

Il suffit d'utiliser git apply -v example.patch pour connaître les raisons du "patch ne s'applique pas". Et ensuite, vous pourrez les corriger une par une.

8voto

Ophidian Points 51

Dans mon cas, j'ai été assez stupide pour créer le fichier patch de manière incorrecte en premier lieu, en fait Diffuser dans le mauvais sens . Je me suis retrouvé avec exactement les mêmes messages d'erreur.

Si vous êtes sur le maître et que vous faites git diff branch-name > branch-name.patch ce qui tente de supprimer tous les ajouts que vous souhaitez voir se produire et vice versa (ce qui était impossible à réaliser pour git puisque, évidemment, les ajouts jamais effectués ne peuvent être supprimés).

Assurez-vous donc de vérifier votre branche et d'exécuter git diff master > branch-name.patch

4voto

chimurai Points 483

git apply --reverse --reject example.patch

Lorsque vous avez créé un fichier patch avec les noms de branches inversés :

ie. git diff feature_branch..master au lieu de git diff master..feature_branch

1voto

Archmede Points 684

AVERTISSEMENT : Cette commande peut supprimer les anciens commits perdus de façon PERMANENTE. Faites une copie de l'ensemble de votre référentiel avant de tenter cette opération.

J'ai trouvé ce lien

Je n'ai aucune idée de la raison pour laquelle cela fonctionne mais j'ai essayé de nombreuses solutions et c'est la seule 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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X