Как читать файлы .rej, т.е. - PullRequest
25 голосов
/ 12 февраля 2009

У меня проблемы с применением патча к моему исходному дереву, и это не обычная -p проблема с зачисткой. patch может найти файл для исправления.

В частности, мой вопрос заключается в том, как читать / интерпретировать .rej файлы, создаваемые patch, когда он терпит неудачу из-за нескольких ошибок. Большинство обсуждений patch / diff, которые я видел, не включают это.

Ответы [ 3 ]

19 голосов
/ 12 февраля 2009

Простой пример:

$ 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, вставить его в соответствующее место в файле, который нужно исправить, а затем сравнить код вручную, чтобы выяснить какие строки на самом деле вызывают конфликт.

Или - в качестве альтернативы: получите исходный файл (без изменений), исправьте его и выполните трехстороннее объединение файла.

10 голосов
/ 19 февраля 2012

Wiggle - отличный инструмент для применения файлов .rej, когда исправление не удается.

4 голосов
/ 16 декабря 2015

Я не эксперт по работе с файлами исправлений, но я хотел бы добавить немного ясности относительно того, как их читать, основываясь на моем понимании информации, которую они содержат.

Ваши .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 original и продолжается 12 строк (часть перед запятой в @@ -4,12, +4,24 @@ во второй строке), начинается со строки 4 новой версии файла и продолжается 24 строки (часть после запятой в @@ -4,12, +4,24 @@ .

Для получения дополнительной информации см. Превосходный обзор файлов исправлений (содержащий информацию, которую я отмечаю выше, а также подробности о добавленных строках и / или между версиями файлов) в http://blog.humphd.org/vocamus-906/.

Любые исправления или уточнения приветствуются, конечно.

...