Как читать .rej файлы, т.е.
У меня возникли проблемы с применением патча к исходному дереву, и это не обычная проблема удаления -p
. patch
может найти файл для исправления.
В частности, мой вопрос заключается в том, как читать/интерпретировать .rej
файлы patch
создает, когда он терпит неудачу на нескольких кусках. Большинство обсуждений patch
/diff
Я не видел этого.
Ответы
Ответ 1
Простой пример:
$ echo -e "line 1\nline 2\nline 3" > a
$ sed -e 's/2/b/' <a >b
$ sed -e 's/2/c/' <a >c
$ diff a b > ab.diff
$ patch c < ab.diff
$ cat c.rej
***************
*** 2
- line 2
--- 2 -----
+ line b
Как вы можете видеть: старый файл содержит строку 2, а новый файл должен содержать строку b. Однако на самом деле он содержит строку c (которая не отображается в файле отклонения).
Фактически, самый простой способ разрешить такие проблемы - взять фрагмент diff из файла .diff/.patch, вставить его в нужное место в файле, который будет исправлен, а затем сравнить код вручную, чтобы выяснить, какие строки действительно вызывают конфликт.
Или - альтернативно: получить исходный файл (немодифицированный), исправить его и запустить трехстороннее слияние в файле.
Ответ 2
Wiggle - отличный инструмент для применения файлов .rej, когда патч не удался.
Ответ 3
Я не специалист по работе с файлами патчей, но я хотел бы добавить некоторую ясность в том, как читать их, основываясь на моем понимании информации, которую они содержат.
Ваши файлы .rej
сообщают вам:
- разница между оригиналом и файлом .rej;
- где код ошибки запускается в исходном файле, сколько строк оно продолжается
в этом файле;
- и где код запускается в новом файле и сколько строк он продолжает в этом файле.
Поэтому, учитывая это сообщение, отмечено в начале моего файла .rej:
diff a/www/js/app.js b/www/js/app.js (rejected hunks)
@@ -4,12 +4,24 @@
Я вижу, что для моего файла проблемы (www/js/app
) разница между оригиналом (отмеченная как a/www/js/app.js
в первой строке) и .rej файлом (отмеченная как b/www/js/
) начинается в строке 4 оригинал и продолжается 12 строк (часть перед запятой в @@ -4,12, +4,24 @@
в строке 2) и начинается в строке 4 новой версии файла и продолжается 24 строки (часть после запятой в @@ -4,12, +4,24 @@
.
Для получения дополнительной информации см. отличный обзор файлов патчей (содержащий информацию, которую я отмечаю выше, а также сведения о добавленных строках и/или между версиями файлов) в http://blog.humphd.org/vocamus-906/.
Любые исправления или пояснения приветствуются, конечно.