Ich versuche gerade, die PRs eines (github) repositorys code-style zu überprüfen, und ich möchte Patches an die Übergeber liefern, mit denen sie den Codestyle einfach beheben können. Zu diesem Zweck ziehe ich ihre PR herunter, führe unser Uncrustify-Skript darüber, um alle Stilfehler zu beheben, und möchte eine .patch-Datei erstellen, die sie leicht anwenden können. Es bricht jedoch einige Dateien ständig ab.git-apply schlägt auf mysteriöse Weise fehl, wie behebe ich Fehler?
ich tun (git Version 1.7.10.4 mit core.autocrlf=input
, core.filemode=false
):
$ git checkout pr-branch
$ git log -1 (shows: commit dbb8d3f)
$ git status (nothing to commit, working directory clean)
$ <run the code styler script, which modifies some files>
$ git diff > ../style.patch (so the patch file lands outside the repo)
$ git reset --hard HEAD (to simulate the situation at the submitter's end)
$ git log -1 (shows: commit dbb8d3f)
$ git status (nothing to commit, working directory clean, so we are where we started)
$ git apply ../style.patch
error: patch failed: somefile.cpp:195
error: somefile.cpp: patch does not apply (same output using the --check option)
Dies gilt nur für einige Dateien, nicht alle von ihnen. Ich weiß nicht, wie ich das Problem beheben soll, d. H. Wie bekomme ich git, mir genau zu sagen, wo es schief geht - es sagt mir nur ein Stück #, wenn ich graben, aber das ist immer noch ziemlich groß.
Was ich bisher versucht (ohne Erfolg):
apply --reverse
,apply --whitespace=nowarn
diff HEAD
stattdiff
allein- eine Dummy machen begehen (! Arbeiten ohne Probleme zu begehen), verwenden
format-patch
, löschen Sie das Dummy-Commit, wenden Sie das Patch mitgit-am
mit oder ohne-3
an, oder wenden Sie sich angit-apply
- Haben Sie die Patch-Datei in der lo cal dir statt einem nach oben (dem Strohhalm greifen, hier)
- den man-pages von git-diff überprüfen, -Tragen, nützliches -format-Patch, -am für alles
- Patch mit dem Linux
patch
Befehl - ....
Ich weiß nicht, was mit dem Diff falsch sein könnte. Whitespace-Dinge sollten nur warnen, oder? In jedem Fall werde ich sie nicht ignorieren wollen, da es sich um eine Stilfixierung handelt, die offensichtlich Leerzeichen beinhaltet.
Wie kann ich das reparieren/diagnostizieren oder sogar herausfinden, wo es genau funktioniert? Würde es helfen, wenn ich den Diff einer der Täterdateien gepostet hätte? Was mich auch verblüfft ist, dass das Commit ohne Probleme funktioniert, aber das Patch vom Commit nicht erstellt wird ??
Nachdem mit diesem Ring für mehrere Stunden, die ich am Ende meines Wissens bin ...
'git gelten - "Ablehnen", um die abgelehnten Änderungen zu sehen. – aragaer
Versuchte das schon ... das zeigt nur das ganze Stück, das scheitert (ungefähr 2-300 Zeilen in diesem einen Fall), also nicht sehr informativ – Christoph
Eine andere Vermutung - es könnte einige Umbenennungen geben und etwas könnte "gitimorned" werden als Ergebnis. – aragaer