Ich habe einen bestimmten Patch namens my_pcc_branch.patch.
Wenn ich versuche, es anzuwenden, erhalte ich folgende Meldung:
$ 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
Was heißt das?
Wie kann ich dieses Problem beheben?
Johannes Sixt aus der Mailingliste [email protected] schlug folgende Befehlszeilenargumente vor:
git apply --ignore-space-change --ignore-whitespace mychanges.patch
Das hat mein Problem gelöst.
git apply --reject --whitespace=fix mychanges.patch
arbeitete für mich.
Dieser Befehl wendet den Patch an, löst ihn jedoch nicht und hinterlässt fehlerhafte Dateien als *.rej
:
git apply --reject --whitespace=fix mypath.patch
Sie müssen sie nur lösen. Einmal gelöst:
git -am resolved
Wenn alles andere fehlschlägt, versuchen Sie die Option git apply
von --3way
.
git apply --3way patchFile.patch
- 3 Weg
Wenn der Patch nicht sauber angewendet wird, greifen Sie auf 3-Wege-Zusammenführung zurück, wenn die patch zeichnet die Identität der Blobs auf, auf die es angewendet werden soll, und wir haben diese Blobs lokal verfügbar und verlassen möglicherweise den Konflikt Markierungen in den Dateien im Arbeitsbaum, die der Benutzer auflösen kann. Diese Option impliziert die Option --index und ist nicht kompatibel mit der --reject und die --cached Optionen.
Ein typischer Fehlerfall trifft so viel wie möglich auf den Patch zu und lässt Sie mit Konflikten konfrontiert werden, so wie Sie es normalerweise tun. Wahrscheinlich ein Schritt einfacher als die reject
-Alternative.
Dies passiert, wenn Sie UNIX- und Windows-git-Clients mischen, da Windows nicht wirklich das Konzept des "x" -Bits hat. Daher wird Ihre Überprüfung einer rw-r--r--
(0644) -Datei unter Windows von der msys POSIX-Ebene als "rwx-r-xr-x
" 0755). git ist der Ansicht, dass der Modusunterschied im Wesentlichen dem textlichen Unterschied in der Datei entspricht, sodass Ihr Patch nicht direkt angewendet wird. Ich denke, Ihre einzige gute Option hier ist, core.filemode
auf false
(mit git-config
) zu setzen.
Hier ein Mysysgit-Problem mit einigen verwandten Informationen: http://code.google.com/p/msysgit/issues/detail?id=164 (umgeleitet auf die Kopie von 3. Dezember 2013 von archive.org)
Versuchen Sie es mit der hier vorgeschlagenen Lösung: https://www.drupal.org/node/1129120
patch -p1 < example.patch
Das hat mir geholfen.
In meinem Fall war ich dumm genug, um die Patch-Datei überhaupt falsch zu erstellen, eigentlich anders falsch . Ich habe genau die gleichen Fehlermeldungen erhalten.
Wenn Sie sich auf Master befinden und git diff branch-name > branch-name.patch
ausführen, werden hierdurch alle Ergänzungen entfernt, die Sie ausführen möchten, und umgekehrt (was für git nicht möglich war, da offensichtlich nie durchgeführte Ergänzungen nicht entfernt werden können).
Stellen Sie also sicher, dass Sie zu Ihrem Zweig gehen und git diff master > branch-name.patch
ausführen.
Ich habe gefunden diesen Link
Ich habe keine Ahnung, warum das funktioniert, aber ich habe viele Workarounds ausprobiert, und dies ist die einzige, die für mich gearbeitet hat. Führen Sie die drei folgenden Befehle aus:
git fsck --full
git reflog expire --expire=now --all
git gc --Prune=now