В настоящее время я пытаюсь выполнить проверку кода в PR-репозитории (github), и я хочу доставить исправления для отправителей, с помощью которых они могут легко исправить codestyle. С этой целью я снимаю свой PR, запускаю наш uncrustify script поверх него, чтобы исправить любые ошибки стиля, и хочу создать файл .patch, который они могут легко применить. Однако он последовательно разбивается на некоторые файлы.
Я делаю (git версия 1.7.10.4 с 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 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)
Это относится только к некоторым файлам, а не ко всем. Я не знаю, как устранить эту проблему, т.е. Как получить git, чтобы сказать мне, где именно он идет не так - он только говорит мне hunk #, когда я копаю, но это все еще довольно огромно.
То, что я пробовал до сих пор (без успеха):
-
apply --reverse
,apply --whitespace=nowarn
-
diff HEAD
вместоdiff
- сделать фиктивный фиксатор (совершать работы без проблем!), использовать
format-patch
, удалить фиктивную фиксацию, применить патч с помощьюgit-am
с помощью или без-3
или применить с помощьюgit-apply
- Примените файл патча в локальном каталоге вместо одного вверх (захват соломы здесь)
- Проверьте man-страницы git -diff, -apply, -format-patch, -am для чего-нибудь полезного
- с командой linux
patch
- ....
Я не знаю, что может быть неправильно с diff. Пробельные вещи должны только предупреждать, не так ли? В любом случае, я не буду игнорировать их, поскольку это исправление стиля, которое, очевидно, включает пробелы.
Как я могу исправить/диагностировать это или даже узнать, где именно это происходит? Помогло бы мне, если бы я опубликовал разницу между одним из виновных файлов? Что меня озадачивает, так это то, что коммит работает без проблем, но патч, созданный с помощью фиксации, не работает?
После борьбы с этим в течение нескольких часов я в конце своих знаний...