wake-up-neo.com

git: patch trifft nicht zu

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?

203
DP_

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.

267
DP_

git apply --reject --whitespace=fix mychanges.patch arbeitete für mich.

208
user1028904

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
43
Ivan Voroshilin

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.

32
ruffin

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)

12
Ben Jackson

Versuchen Sie es mit der hier vorgeschlagenen Lösung: https://www.drupal.org/node/1129120

patch -p1 < example.patch

Das hat mir geholfen.

6
Pini Cheyni

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.

1
Ophidian

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
0
Archmede