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 bedeutet das?
Wie kann ich dieses Problem beheben?
has type 100644, expected 100755
, dass irgendwo eine Nichtübereinstimmung der chmod-Berechtigungen vorliegt?Antworten:
git apply --reject --whitespace=fix mychanges.patch
arbeitete für mich.Erläuterung
Die
--reject
Option weist git an, nicht fehlzuschlagen, wenn nicht festgelegt werden kann, wie ein Patch angewendet werden soll. Stattdessen können einzelne Hunks angewendet und Ablehnungsdateien (.rej
) für Hunks erstellt werden, die nicht angewendet werden können. Wiggle kann "[diese] abgelehnten Patches anwenden und wortweise Unterschiede ausführen".Zusätzlich,
--whitespace=fix
vor Leerzeichenfehlern und versucht, diese zu beheben, anstatt sich zu weigern, einen ansonsten zutreffenden Teil anzuwenden.Beide Optionen zusammen machen die Anwendung eines Patches robuster gegen Fehler, erfordern jedoch zusätzliche Aufmerksamkeit in Bezug auf das Ergebnis.
Die gesamte Dokumentation finden Sie unter https://git-scm.com/docs/git-apply .
quelle
.rej
Dateien, wenn nicht automatisch erkannt werden kann, wie ein Patch angewendet wird. Sie können Wackeln verwenden , um solche Probleme zu beheben.Johannes Sixt von der Mailingliste [email protected] schlug vor, die folgenden Befehlszeilenargumente zu verwenden:
Dies löste mein Problem.
quelle
-C1
wechseln. Dadurch wird der Kontext um Ergänzungen reduziert, die als wichtig angesehen werden.Wenn alles andere fehlschlägt, versuchen Sie es mit
git apply
der--3way
Option .git apply --3way patchFile.patch
Ein typischer Fehlerfall wendet so viel Patch wie möglich an und führt zu Konflikten, die in git auftreten können, wie Sie es normalerweise tun. Wahrscheinlich ein Schritt einfacher als die
reject
Alternative.quelle
--3way
sollte das Standardverhalten sein. Wenn das Patchen fehlschlägt, teilen Sie mir zumindest mit, was fehlgeschlagen ist, damit ich es manuell beheben kann.git apply
scheitert einfach und meldet nicht, warum etwas fehlschlägt. Ich konnte nicht einmal*.rej
Dateien finden , wie siehg
generiert wurden.Dieser Befehl wendet den Patch an, ohne ihn zu beheben, und hinterlässt fehlerhafte Dateien wie folgt
*.rej
:Sie müssen sie nur lösen. Einmal gelöst ausführen:
quelle
*.rej
- Alles, was ich finden kann, ist, die Änderungen manuell in der Quelldatei vorzunehmen und diese.rej
Dateien zu löschen . Irgendein anderer Weg?wiggle --replace path/to/file path/to/file.rej
. Dieser Befehl übernimmt Änderungen von.rej
Datei zu Originaldatei. Außerdem wird eine Kopie der Originaldatei erstellt, zpath/to/file.porig
. BitteVersuchen Sie es mit der hier vorgeschlagenen Lösung: https://www.drupal.org/node/1129120
patch -p1 < example.patch
Das hat mir geholfen.
quelle
git: 'patch' is not a git command.
amgit version 2.21.1 (Apple Git-122.3)
Es passiert, wenn Sie UNIX- und Windows-Git-Clients mischen, weil Windows das Konzept des "x"
rw-r--r--
-Bits nicht wirklich hat, sodass das Auschecken einer (0644) -Datei unter Windows von der msys-POSIX-Ebene als "rwx-r-xr-x
(0755) " heraufgestuft "wird. . Git betrachtet diesen Modusunterschied im Grunde als einen Textunterschied in der Datei, sodass Ihr Patch nicht direkt angewendet wird. Ich denke, Ihre einzige gute Option ist es,core.filemode
auffalse
(usinggit-config
) zu setzen.Hier ist ein Problem mit msysgit mit verwandten Informationen: http://code.google.com/p/msysgit/issues/detail?id=164 (umgeleitet auf die Kopie von archive.org vom 3. Dezember 2013)
quelle
git reset --hard HEAD
, git zu zwingen, Ihre Dateien mit der neuen Option erneut auszuchecken.In meinem Fall war ich dumm genug, die Patch-Datei überhaupt falsch zu erstellen, und zwar auf die falsche Weise . Am Ende hatte ich genau die gleichen Fehlermeldungen.
Wenn Sie Master sind und dies tun
git diff branch-name > branch-name.patch
, wird versucht, alle gewünschten Ergänzungen zu entfernen und umgekehrt (was für Git unmöglich war, da natürlich nie vorgenommene Ergänzungen nicht entfernt werden können).Stellen Sie also sicher, dass Sie zu Ihrer Filiale auschecken und ausführen
git diff master > branch-name.patch
quelle
WARNUNG: Mit diesem Befehl können alte verlorene Commits dauerhaft entfernt werden. Erstellen Sie eine Kopie Ihres gesamten Repositorys, bevor Sie dies versuchen.
Ich habe diesen Link gefunden
Ich habe keine Ahnung, warum dies funktioniert, aber ich habe viele Umgehungsmöglichkeiten ausprobiert und dies ist die einzige, die für mich funktioniert hat. Kurz gesagt, führen Sie die folgenden drei Befehle aus:
quelle
Was ich gesucht habe, wird hier in SO nicht genau erwähnt. Ich schreibe zum Nutzen anderer, die nach ähnlichen suchen könnten. Ich hatte ein Problem mit einer Datei (im alten Repo vorhanden), die im Repo entfernt wurde. Und wenn ich den Patch anwende, schlägt er fehl, da die anzuwendende Datei nicht gefunden werden konnte. (Mein Fall ist also, dass der Git-Patch fehlschlägt, weil die Datei entfernt wurde.) '#git apply --reject' gab definitiv eine Ansicht, brachte mich aber nicht ganz zum Fix. Ich konnte wiggle nicht verwenden, da es für uns auf unseren Build-Servern nicht verfügbar ist. In meinem Fall habe ich dieses Problem gelöst, indem ich den Eintrag der 'Datei, die im Repo entfernt wurde' aus der Patch-Datei entfernt habe, die ich angewendet habe, sodass alle anderen Änderungen ohne Probleme angewendet wurden (3-Wege-Zusammenführung, Vermeidung Leerzeichenfehler) und dann das manuelle Zusammenführen des Inhalts der entfernten Datei an der Stelle, an der sie verschoben wurde.
quelle
Mein Problem ist, dass ich ausgeführt habe
git diff
, dann ausgeführt habegit reset --hard HEAD
und dann realisiert habe, dass ich rückgängig machen wollte, also habe ich versucht, die Ausgabe vongit diff
in eine Datei zu kopieren und zu verwendengit apply
, aber ich habe die Fehlermeldung erhalten, dass "Patch nicht angewendet wird". Nachdem ich zu ihm gewechseltpatch
und versucht hatte, ihn zu verwenden, stellte ich fest, dass ein Teil des Diff aus irgendeinem Grund wiederholt wurde, und nachdem ich das Duplikat entfernt hattepatch
(und vermutlich auchgit apply
), funktionierte es.quelle