496 Stimmen

Git: Patch lässt sich nicht anwenden

Ich habe einen bestimmten Patch namens my_pcc_branch.patch.

Wenn ich versuche, ihn anzuwenden, erhalte ich folgende Meldung:

$ git apply --check my_pcc_branch.patch
warning: src/main/java/.../AbstractedPanel.java hat Typ 100644, erwartet wird 100755
error: patch fehlgeschlagen: src/main/java/.../AbstractedPanel.java:13
error: src/main/java/.../AbstractedPanel.java: Patch wird nicht angewendet

Was bedeutet das?

Wie kann ich dieses Problem beheben?

0 Stimmen

Gibt es irgendwelche AbstractedPanel.java.rej Dateien herumliegen? Typischerweise bedeutet dies, dass eine Zeile sowohl in der Quelle als auch im Patch geändert wurde (hier scheint Zeile 13 betroffen zu sein).

0 Stimmen

Nein, ich habe keine *.rej-Dateien gefunden.

0 Stimmen

Hast du versucht, einen Bug an git@vger.kernel.org zu melden? Keine der beschriebenen Optionen von Git funktioniert für mich und es treten unzählige Fehler auf. Ich musste auf WinMerge zurückgreifen.

18voto

Ben Jackson Punkte 84305

Es passiert, wenn UNIX- und Windows-Git-Clients gemischt werden, weil Windows das Konzept des "x"-Bits nicht wirklich hat, so dass Ihr Checkout einer rw-r--r-- (0644) Datei unter Windows durch die POSIX-Schicht von msys "hochgestuft" wird auf rwx-r-xr-x (0755). Git betrachtet diesen Unterschied im Modus im Grunde genommen als gleichwertig mit einem textuellen Unterschied in der Datei, sodass Ihr Patch nicht direkt angewendet wird. Ich denke, Ihre einzige gute Option hier ist es, core.filemode auf false zu setzen (mit git-config).

Hier ist ein msysgit Problem mit einigen verwandten Informationen: http://code.google.com/p/msysgit/issues/detail?id=164 (umgeleitet auf das Archiv von archive.org vom 3. Dezember 2013)

2 Stimmen

Ich habe versucht, den Befehl "git config core.filemode false" auszuführen, aber es hat nicht geholfen - ich erhalte immer noch die gleiche Meldung.

1 Stimmen

Unter der Annahme, dass Sie keine nicht festgelegten Änderungen in Ihrem Baum haben, versuchen Sie git reset --hard HEAD, um Git zu zwingen, Ihre Dateien mit der neuen Option erneut auszuchecken.

0 Stimmen

Gerade ausprobiert, führen Sie "git reset --hard HEAD" aus. Es war erfolgreich (ich sah die Meldung "HEAD ist jetzt bei ..."), aber das Problem mit "git apply" bleibt bestehen.

11voto

secfree Punkte 3987

Verwenden Sie einfach git apply -v Beispiel.patch, um die Gründe dafür zu erfahren, dass der "Patch nicht angewendet" wird. Dann können Sie sie Stück für Stück beheben.

8voto

Ophidian Punkte 537

In meinem Fall war ich dumm genug, die Patch-Datei von Anfang an falsch zu erstellen, tatsächlich in die falsche Richtung zu diffen. Ich endete mit den genau gleichen Fehlermeldungen.

Wenn Sie sich im master befinden und git diff branch-name > branch-name.patch ausführen, versucht dies alle Hinzufügungen zu entfernen, die Sie wünschen, und umgekehrt (was für git unmöglich war zu erreichen, da offensichtlich niemals durchgeführte Hinzufügungen nicht entfernt werden können).

Stellen Sie daher sicher, dass Sie zu Ihrem Branch wechseln und git diff master > branch-name.patch ausführen

0 Stimmen

Ich habe denselben Fehler gemacht, schau dir chimurais Antwort stackoverflow.com/a/65357332/1248565 an.

6voto

chimurai Punkte 1135

git apply --reverse --reject example.patch

Wenn Sie eine Patch-Datei mit umgekehrten Branch-Namen erstellt haben:

z.B. git diff feature_branch..master anstatt git diff master..feature_branch

1voto

Archmede Punkte 1302

WARNUNG: Dieser Befehl kann alte verlorene Commits Dauerhaft entfernen. Machen Sie eine Kopie Ihres gesamten Repositorys, bevor Sie dies versuchen.

Ich habe diesen Link gefunden

Ich habe keine Ahnung, warum das funktioniert, aber ich habe viele Workarounds ausprobiert und dies ist der einzige, der für mich funktioniert hat. Kurz gesagt, führen Sie die drei folgenden Befehle aus:

git fsck --full
git reflog expire --expire=now --all
git gc --prune=now

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X