Подтвердить что ты не робот

Использование вывода diff для создания патча

У меня есть что-то вроде этого

src/sim/simulate.cc
41d40
< #include "mem/mem-interface.h"
90,91d88
<             dram_print_stats_common(curTick/500);
<
src/mem/physical.hh
52d51
<   public:
55,56d53
<       public:
<
58a56,57
>       public:
>
61,62c60,61
<         virtual bool recvTiming(PacketPtr pkt); //baoyg
<
---

Я считаю, что это было создано с помощью команды diff в исходном дереве. Я хочу создать патч, используя этот вывод, и применить те же изменения к моему исходному дереву.

4b9b3361

Ответ 1

Я считаю, что diff -u oldfile newfile > a.patch используется для создания файлов патчей, хотя некоторые другие переключаемые могут быть выбраны также (-N?).

Изменить: ОК, 4 года спустя и, наконец, объясню, что означают переключатели:

-u создает Unified diff. Унифицированные различия - это те различия, которые программа патчей ожидает получить в качестве входных данных. Вы также можете указать число после u (мин. 3, значение по умолчанию 3), чтобы увеличить количество выводимых строк. Это в случае, если 3 строки не являются уникальными, чтобы точно определить только одно место в программе.

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

Кроме того, newfile и oldfile могут быть как каталогами, так и отдельными файлами. Вероятно, вам понадобится аргумент -r для этого, чтобы перезаписать любые подкаталоги.

Ответ 2

Если вы хотите получить тот же файл патча, что и SVN diff, учитывая два разных файла:

diff -Naur file1.cpp file2.cpp

Ответ 3

У вас есть не унифицированный diff. patch может прочитать его, но не сможет выполнить контекстные совпадения и, скорее всего, допустит ошибки.

Ответ 4

Это (частично) файл патча, хотя было бы лучше, если бы они предоставили вам единый diff-выход.

Основная проблема с этим патчем заключается в том, что он не упоминает, какие файлы изменяются, а поскольку нет контекста, файлы должны быть точными, патч не сможет разрешить незначительные изменения в файле.

Ответ 5

Скопируйте diff из исходного сообщения в файл патча с именем test.patch, затем запустите

patch <original file> test.patch

@Sparr и @Arafangion указывают, что это работает лучше всего, если у вас есть точный исходный файл, использованный для создания оригинального diff.